0

私が次のようなものを持っている場合

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

がand のcallback3後に実行されることは保証されていますか? (最初の 2 つのコールバックは、基になる AJAX の完了に応じて、どちらの順序でも実行できます。)callback1callback2

いくつかの限定的なテストではそうであるように見えますが、それは常に本当ですか、それとも偶然ですか? つまり、doneコールバックが終了したときに解決される新しい promise を返しますか?

4

2 に答える 2

0

はい。コールバック (単一の promise ごと) は、アタッチされたのと同じ順序で実行されることが保証されています。少なくとも仕様は についてこれを規定してthenおり、jQuery は仕様 [すべて] に従っていませんがCallbacksオブジェクトはこのように実装されています。

ただし、これに頼る必要はありません。callback3前のコールバックの結果 (アクション) に依存する場合は、そのように明示する必要があります。thenメソッド(以前のpipe)を使用して、コールバックの結果に対する promise を作成できます。

$.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 に答える