8

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/

4
  • When do you expect them to be resolved? Commented Dec 12, 2012 at 15:42
  • @ExplosionPills when a1, a2 a3 and a4 are all resolved I would expect the final when to be resolved. If you follow? Commented Dec 12, 2012 at 15:43
  • Just guessing... What would happen if you changed it to this? $.when( a1().then(function(){ a2() })); Commented Dec 12, 2012 at 15:48
  • @ChrisFrancis that did work but ExplosionPills has nailed it Commented Dec 12, 2012 at 15:55

2 Answers 2

11

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/

Sign up to request clarification or add additional context in comments.

Comments

5

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/

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.