I've spent far too many hours searching for similar questions and trying solutions, so I hope someone has a solution.
Basically, I would like to be notified when a function a() has completed. The problem is that the function contains an ajax call and a loop that calls b(), which again contains an ajax call.
UPDATED WITH FIDDLE: http://jsfiddle.net/hsyj7/1/
Like so:
// 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');
});
}
What I would like to see then is, possibly with both calls to a() at the top:
a called
b called
b called
a called
b called
b called
all completed
Instead I get
a called
all completed
b called
b called
Or some variant thereof.
I am aware that the above code is missing defer functionality in both the loop and in b().
In some of the variants I have tried, the done() handler in main() is never called.
Any one know how to do this?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…