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()コールバックによって作成されたpromiseオブジェクトとa4()コールバックから作成されたpromiseオブジェクトを実際に返すことはありません。これは事実上を返しますnull。これは明らかに$.when目的の完了としてカウントされます。

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

于 2012-12-12T15:52:50.293 に答える
5

あなたはpromiseオブジェクトを捨てて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");
});  

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

于 2012-12-12T15:55:09.457 に答える