Essentially I am tring to write this:
var async1 = $.when( a1() ).then(function(){ a2() });
var async2 = $.when( a3() ).then(function(){ a4() });
$.when(async1, async2).then(function(){
console.log("complete");
});
But at the moment when a1 and a3 have executed the function considers itself resolved.
I put together the same example in a fiddle: http://jsfiddle.net/Z7fzR/
You never actually return the promise objects created by a2()
and a4()
from the callback; this effectively returns null
, which apparently counts as a completion for $.when
purposes:
http://jsfiddle.net/Z7fzR/1/
You are throwing away the promise objects that a2
and a4
return, essentially passing undefined
back to the original when
, which causes it to resolve immediately:
If a single argument is passed to jQuery.when and it is not a Deferred, it will be treated as a resolved Deferred and any doneCallbacks attached will be executed immediately.
Add some returns and it works fine.
var async1 = $.when(a1()).then(function(){ return a2(); });
var async2 = $.when(a3()).then(function(){ return a4(); });
$.when(async1, async2).then(function(){
console.log("complete");
});
http://jsfiddle.net/Z7fzR/2/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With