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/
您将丢弃承诺对象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)