我需要向 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!'); });
基本上 Level 1 和 Level 3 需要并行执行。Level 2s都是基于Level 1的结果。而Level 1,所有的Level 2s和Level 3都需要在All done之前执行。
使用上面的代码不起作用,因为对 .pipe() 的调用不会影响 .when() 正在监视的内容。
可以用 jQuery 的 Deferred 框架做我想做的事吗?
谢谢你的帮助。
注意:早些时候,我问了一个非常相似的问题,但我意识到情况比我在那里说明的要复杂得多,我不想对现有答案造成混淆。