嵌套jQuery $ .when

基本上我是想写这个:

var async1 = $.when( a1() ).then(function(){ a2() }); var async2 = $.when( a3() ).then(function(){ a4() }); $.when(async1, async2).then(function(){ console.log("complete"); }); 

但是当a1和a3执行时,该function认为自己已经解决了。

我把一个相同的例子放在一个小提琴中: http : //jsfiddle.net/Z7fzR/

你永远不会从回调中实际返回由a2()a4()创建的promise对象; 这有效地返回null ,这显然被视为$.when目的的完成:

http://jsfiddle.net/Z7fzR/1/

你扔掉了a2a4返回的promise对象,实际上是将undefined传回原来的,这会导致它立即解决:

如果将单个参数传递给jQuery.when并且它不是Deferred,则将其视为已解决的Deferred,并且将立即执行所附加的任何doneCallbacks。

添加一些返回,它工作正常。

 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/