尽管有六个小时的阅读时间,包括官方文档,我仍然无法绕过承诺的实施。 (我得到了核心概念。)在函数X中,我有多个ajax调用。我已经能够确定所有Y ajax调用何时完成(但是,我仍然没有完全掌握语法产生结果的 )。
但是,我仍然需要让函数X(另一个函数)的调用者知道所有Y ajax调用都已完成。这是一个简化/半伪代码示例。 (我想知道我之前的尝试是否由于范围问题而失败,但我没有看到延迟对象传递给我见过的示例中的函数。我决定将下面的示例保持为“干净”而不是显示特定的尝试失败。)
$.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
}
非常感谢您的帮助! :)
答案 0 :(得分:1)
首先,在您的$.when
功能中尝试SendEmails
AnotherFunction
。然后,在您的$().SendEmails(emailsToSend)
拨打此电话后.then()
,添加$().SendEmails(emailsToSend).then(function() { /* other stuff */});
:
.then()
Alt-Click SomeNameTest.java Run as -> Maven Test
只有在返回的承诺解决后才会触发。