2016-04-03 7 views
0

1) Ich habe eine Kette von jquery dann(), wie folgt aus:Javascript dann() Verkettung - was verzögert entspricht die zweite dann()?

someAjax().then(function(val) { console.log("done 1: " + val); return val + 1; }, 
       function(val) { console.log("fail 1: " + val); return val + 2; }, 
       function(val) { console.log("prog 1: " + val); return val + 3; } 

     ).then(function(val) { console.log("done 2: " + val) }, 
       function(val) { console.log("fail 2: " + val) }, 
       function(val) { console.log("prog 2: " + val) } 
     ) 

Ich verstehe, dass die drei Funktionen (drei args) des ersten dann(), um die Zustände der latenten Objekt entsprechen von etwasAjax().

Allerdings verstehe ich nicht, was zurückgestellt Objekt die drei Funktionen (Args) der Sekunde dann entsprechen? Zum Beispiel, was ist, wenn (oder ist das möglich) jede der drei Funktionen der ersten then() kann ein eigenes Deferred-Objekt zurückgeben?

Ich habe das Gefühl, dass ich hier etwas falsch verstehen kann. Schätzen Sie jede Klärung.

///////////////////////////////////////////////// //////

2) ich habe eine andere wie diese Verkettungs:

$.getJSON(url).then(
       doneFunction1, 
       errorFunction1 
      ).then(
       doneFunction2 
      }); 

Die doneFunction1 sieht wie folgt aus:

function doneFunction1(val){ 
    if(val > 1) 
     return $.ajax(url2); 
} 

so geht diese gibt nicht immer ein Versprechen, wie Sie siehe, abhängig von val. Falls es keine Zusage gibt (zB val < 1), wie geht die zweite dann weiter? Würde das einen Fehler verursachen? Denn wie ich verstehe, gibt es keine Zusage, dann anzurufen(). Meine Vermutung ist, dass es vielleicht das then() des ersten Promise von $.getJSON anruft, aber ich könnte falsch liegen.

Grundsätzlich versuche ich NICHT, die zweite then() überhaupt zu haben, wenn "val < 1". Ist es möglich?

+0

es bezieht sich auf alles, was Sie von der ersten .then Versprechen zurückzukehren – JordanHendrix

+0

'.then' nur dauert in der Regel zwei Funktionen, die erste genannt wird wenn das Versprechen verklagt, das zweite, wenn es abgelehnt wird? – adeneo

+0

Es wäre ziemlich wichtig hier zu erwähnen, dass Sie jQuery und nicht die richtigen A + Versprechen verwenden! – adeneo

Antwort

1

können Sie nur eine latente Rück dass entweder aufgelöst oder abgelehnt

function doneFunction1(val){ 
    if(val > 1) { 
     return $.ajax(url2); 
    } else { 
     var def = $.Deferred(); 
     return def.reject(); // or def.resolve('something'); to hit the success handler 
    } 
} 

$.getJSON(url).then(
    doneFunction1, 
    errorFunction1 
).then(
    doneFunction2, 
    errorFunction2 // only needed if you want to catch the error 
}); 
Verwandte Themen