状態が成功に設定される前に、既存のDeferredのコントラクトに別の非同期呼び出しを追加しようとしています。これを英語で説明するのではなく、次の擬似コードを参照してください。
$.when(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 1 done.')
jqXhr.pipe(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 2 done.');
},
})
);
},
}),
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 3 done.');
},
})
).then(function(){ console.log('All done!'); });
基本的に、コール2はコール1の結果に依存します。コール1とコール3を並行して実行したいと思います。3つの呼び出しがすべて完了したら、AllDoneコードを実行します。私の理解では、Deferred.pipe()
別の非同期呼び出しを特定の遅延にチェーンすることになっていますが、実際には、すべて完了した後に常に呼び出し2が完了します。
jQueryのDeferredに私がやりたいことをさせる方法を知っている人はいますか?うまくいけば、解決策には、コードをチャンクに分割する必要がありません。
助けてくれてありがとう。
更新:フォローアップの質問をご覧ください。