Я потратил слишком много часов на поиск похожих вопросов и попыток решения, поэтому я надеюсь, что у кого-то есть решение.
В принципе, я хотел бы получить уведомление о завершении функции 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 called
b called
b called
a called
b called
b called
all completed
Вместо этого я получаю
a called
all completed
b called
b called
Или какой-либо вариант.
Я знаю, что в приведенном выше коде отсутствует функция отсрочки как в цикле, так и в b(). В некоторых вариантах, которые я пробовал, обработчик done() в main() никогда не вызывается.
Кто-нибудь знает, как это сделать?