2012-12-12 13 views
6

Zasadniczo jestem tring napisać to:

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

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

Ale w chwili, gdy a1 i a3 Wykonaliśmy funkcję uważa się za rozwiązany.

Stworzyłam ten sam przykład w ryba: http://jsfiddle.net/Z7fzR/

+0

Kiedy ty * * oczekiwać, żeby zostać rozwiązany? –

+0

@ExplosionPills po rozwiązaniu a1, a2 a3 i a4 oczekiwałbym ostatecznego rozstrzygnięcia. Jeśli podążasz? – JonWells

+0

Po prostu zgaduję ... Co by się stało, gdybyś to zmienił? '$ .when (a1(). then (function() {a2()}));' –

Odpowiedz

10

Nigdy rzeczywiście powrócić obiekty obietnicy stworzone przez a2() i a4() z zwrotnego; To skutecznie zwraca null, który najwyraźniej liczy się jako zakończenie na $.when celach:

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

4

Jesteś wyrzucać obietnica obiektów, które a2 and a4 powrót zasadniczo przechodzącej undefined z powrotem do pierwotnego when, co powoduje jej natychmiast rozwiązać:

Jeśli pojedynczy argument zostanie przekazany do jQuery.Gdy i nie jest odroczony, będzie traktowany jako rozstrzygnięty Odroczony, a wszystkie dołączone odsyłacze natychmiast wykonać.

Dodaj trochę zwrotów i działa dobrze.

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/

Powiązane problemy