我花了太多时间寻找类似的问题并尝试解决方案,所以我希望有人有解决方案。
基本上,我希望在函数 a() 完成时收到通知。问题是该函数包含一个 ajax 调用和一个调用 b() 的循环,该循环又包含一个 ajax 调用。
用小提琴更新:http : //jsfiddle.net/hsyj7/1/
像这样:
// called by main()
function a() {
return $.ajax("http://url1").pipe(function(data){
for (var i = 0; i < 2; i++) {
console.log('a called');
b();
}
});
}
// called by a()
function b() {
for (var i = 0; i < 2; i++) {
$.ajax("http://url2", function(data){
// do something
console.log('b called');
}
}
}
function main(){
$.when(a()).done(function(){
console.log('all completed');
});
}
那么我想看到的是,可能在顶部同时调用 a() :
a called
b called
b called
a called
b called
b called
all completed
相反,我得到
a called
all completed
b called
b called
或者它的一些变体。
我知道上面的代码在循环和 b() 中都缺少延迟功能。在我尝试过的一些变体中,从不调用 main() 中的 done() 处理程序。
有人知道怎么做吗?