嵌套jQuery $ .when

Jon*_*lls 7 javascript jquery jquery-deferred

基本上我是想写这个:

var async1 = $.when( a1() ).then(function(){ a2() });
var async2 = $.when( a3() ).then(function(){ a4() });

$.when(async1, async2).then(function(){ 
    console.log("complete");
}); 
Run Code Online (Sandbox Code Playgroud)

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

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

Exp*_*lls 11

你从来没有真正返回所创造的承诺目标a2(),并a4()从回调; 这有效地返回null,这显然被视为完成$.when目的:

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


jba*_*bey 5

您将丢弃承诺对象a2并a4返回,本质上将传递undefined回原始对象when,这将导致原始对象立即解析:

如果将单个参数传递给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");
});  
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Z7fzR/2/