私は似たような質問を探して解決策を試すのに非常に多くの時間を費やしてきたので、誰かが解決策を持っていることを願っています。
基本的に、関数a()が完了したときに通知を受け取りたいと思います。問題は、関数にajax呼び出しと、b()を呼び出すループが含まれていることです。このループにもajax呼び出しが含まれています。
FIDDLEで更新: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()ハンドラーが呼び出されることはありません。
誰かがこれを行う方法を知っていますか?