8

基本上我想写这个:

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

$.when(async1, async2).then(function(){ 
    console.log("complete");
}); 

但是在 a1 和 a3 执行的那一刻,该函数认为自己已解决。

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

4

2 回答 2

11

你永远不会真正返回由回调创建a2()a4()从回调创建的 Promise 对象;这有效地返回null,这显然算作完成$.when目的:

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

于 2012-12-12T15:52:50.293 回答
5

您正在丢弃a2a4返回的 promise 对象,本质上是传递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");
});  

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

于 2012-12-12T15:55:09.457 回答