0

如果我有类似的东西

var promise1 = $.ajax(...).done(callback1);
var promise2 = $.ajax(...).done(callback2);
$.when(promise1, promise2).done(callback3);

是否保证callback3会在callback1and之后运行callback2?(前两个回调可以按任意顺序运行,具体取决于底层 AJAX 完成。)

在一些有限的测试中似乎是这样,但它总是真实的还是巧合?换句话说,是否done返回一个在回调完成时解析的新承诺?

4

2 回答 2

0

如果callback1并且callback2不执行任何异步操作(例如进一步的 ajax 请求或动画),您可以使用您的代码并且知道在使用现有代码执行callback1之前 2 将始终完成。callback3但是,如果callback1和/或callback2执行进一步的异步操作,.then如果您想等到进一步的异步操作也完成,则需要使用。

function callback1 (data) {
    return $.ajax(...);
}
function callback2 (data) {
    return $.ajax(...);
}
var promise1 = $.ajax(...).then(callback1);
var promise2 = $.ajax(...).then(callback2);
$.when(promise1,promise2).done(callback3);
于 2013-09-19T19:13:15.903 回答
0

是的。回调(每个承诺)保证按照它们附加的顺序运行。至少规范thenCallbacks. _ _

但是,您永远不需要依赖它。如果callback3确实依赖于先前回调的结果(动作),它应该如此明确地声明。then您可以使用以下方法(以前)为回调结果创建承诺pipe

$.when(
    $.ajax(…).then(callback1),
    $.ajax(…).then(callback2)
).done(callback3);

// more explicit:

var ajax1 = $.ajax(…),
    ajax2 = $.ajax(…),
    ajaxAndAction1 = ajax1.then(callback1),
    ajaxAndAction2 = ajax2.then(callback2),
    everything = $.when(ajaxAndAction1, ajaxAndAction2);
everything.done(callback3);
于 2013-09-19T18:10:58.423 回答