必要なのは、jQueryの.when()によって監視されている関数に不明な数(実行時にのみ認識される)の.pipe()呼び出しを追加することです。これらの呼び出しは、別の非同期操作の結果として行われたajax呼び出しに基づいています。より明確な説明については、以下のコードを参照してください。
$.when(
$.ajax({
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Level 1')
for(var i = 0; i < data.length; i++)
jqXhr.pipe(
$.ajax({
data: data[i],
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Level 2');
},
})
);
},
}),
$.ajax({
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Level 3');
},
})
).done(function(){ console.log('All done!'); });
基本的に、レベル1とレベル3は並行して実行する必要があります。レベル2はすべてレベル1の結果に基づいています。また、レベル1、すべてのレベル2とレベル3は、すべてが完了する前に実行する必要があります。
.pipe()の呼び出しは、.when()が監視しているものに影響を与えないため、上記のコードを使用しても機能しません。
jQueryのDeferredフレームワークでやりたいことをすることは可能ですか?
助けてくれてありがとう。
注:以前、非常によく似た質問をしましたが、状況はそこに示したものよりもはるかに複雑であり、既存の回答と混同したくありませんでした。