jQuery:在一个函数内,了解另一个函数内完成的承诺
jQuery: inside one function, become aware of completed promise inside another function
一些上下文
尽管阅读了六个小时(包括官方文档),但我仍然难以理解 promises 的实现。 (我明白了核心概念。)在函数 X 中,我有 Y 次 ajax 调用。我已经能够确定所有 Y ajax 调用何时完成(虽然,我仍然没有完全掌握 如何 语法产生结果)。
需要
但是,我仍然需要让函数 X(另一个函数)的 caller 知道所有 Y ajax 调用已经完成。这是一个简化/半伪代码示例。 (我想知道我之前的尝试是否因为范围问题而失败,但在我看到的示例中我没有看到延迟对象传递给函数。我决定保留下面的示例 "clean" 而不是显示一次失败的尝试。)
$.fn.SendEmails = function (emailsToSend) {
var emailSendingPromises = [];
$.each(emailsToSend, function (i, p) {
emailSendingPromises.push($.ajax({
// relevant stuff
})
.done( function () {
console.log('one email done');
})
.fail( function () {
console.log('one email failed');
}));
});
// when all promises have completed
$.when.apply($, emailSendingPromises).always(function () {
console.log('all emails completed');
// --- MAKE CALLER AWARE ALL EMAILS ARE COMPLETED ---
});
}
$.fn.AnotherFunction = function () {
$().SendEmails(emailsToSend);
// --- BECOME AWARE THAT ALL EMAILS ARE COMPLETED ---
// do other stuff only when all emails are completed AND some other things happen
}
非常感谢您的帮助! :)
首先,尝试在 SendEmails
函数中 return
ing 您的 $.when
。然后,在您的 AnotherFunction
中,在您进行此调用后:$().SendEmails(emailsToSend)
,添加一个 .then()
:
$().SendEmails(emailsToSend).then(function() { /* other stuff */});
.then()
仅在返回的承诺已解决后才会触发。
一些上下文
尽管阅读了六个小时(包括官方文档),但我仍然难以理解 promises 的实现。 (我明白了核心概念。)在函数 X 中,我有 Y 次 ajax 调用。我已经能够确定所有 Y ajax 调用何时完成(虽然,我仍然没有完全掌握 如何 语法产生结果)。
需要
但是,我仍然需要让函数 X(另一个函数)的 caller 知道所有 Y ajax 调用已经完成。这是一个简化/半伪代码示例。 (我想知道我之前的尝试是否因为范围问题而失败,但在我看到的示例中我没有看到延迟对象传递给函数。我决定保留下面的示例 "clean" 而不是显示一次失败的尝试。)
$.fn.SendEmails = function (emailsToSend) {
var emailSendingPromises = [];
$.each(emailsToSend, function (i, p) {
emailSendingPromises.push($.ajax({
// relevant stuff
})
.done( function () {
console.log('one email done');
})
.fail( function () {
console.log('one email failed');
}));
});
// when all promises have completed
$.when.apply($, emailSendingPromises).always(function () {
console.log('all emails completed');
// --- MAKE CALLER AWARE ALL EMAILS ARE COMPLETED ---
});
}
$.fn.AnotherFunction = function () {
$().SendEmails(emailsToSend);
// --- BECOME AWARE THAT ALL EMAILS ARE COMPLETED ---
// do other stuff only when all emails are completed AND some other things happen
}
非常感谢您的帮助! :)
首先,尝试在 SendEmails
函数中 return
ing 您的 $.when
。然后,在您的 AnotherFunction
中,在您进行此调用后:$().SendEmails(emailsToSend)
,添加一个 .then()
:
$().SendEmails(emailsToSend).then(function() { /* other stuff */});
.then()
仅在返回的承诺已解决后才会触发。