2017-03-11 8 views
2

Gibt es einen Unterschied zwischen diesen beiden Möglichkeiten für die Versprechen von einer Funktion zurückkehrJavascript Rückkehr Versprechen von Funktion - Versprechen Kette vs Variable

var promise; 
promise = callAsync(); 
promise.then(doSomething).then(doSomethingElse); 
return promise; 

vs

var promise; 
promise = callAsync(); 
return promise.then(doSomething).then(doSomethingElse); 

Ich dachte, beide Ansätze gleich sind, aber In einem Mokka-Testfall funktioniert nur der zweite Ansatz.

+2

Nur der zweite Ansatz ist korrekt, der erste gibt das callAsync-Versprechen zurück nur –

+0

@JaromandaX hätte das Versprechen, das von callAsync() initiiert wurde, die Versprechenskette in beiden Fällen erstellt? – Jithin

+1

Wenn das so wäre, dann würde ich mich irren. Aber ich liege nicht falsch: p –

Antwort

3

Sie sind sicherlich nicht das Gleiche. Jedes gibt ein neues Versprechen zurück. So

return promise; 

kehrt die Urverheißung, aber:

return promise.then(doSomething).then(doSomethingElse); 

ein neues Versprechen der Rückkehr, dass das Ergebnis ist, beide .then() Methoden aufrufen. Der Unterschied besteht darin, dass die letzte ein Versprechen zurückgibt, das durch die in diesen Methoden genannten Funktionen beeinflusst wird, während das erste Versprechen nur durch callAsync() beeinflusst wird und nichts mit den anderen Handlern zu tun hat.

Das erste Versprechen ist nur Überwachung callAsync(). Es hat absolut nichts damit zu tun, was in anderen Handlern passiert. Der Schlüssel zum Verständnis ist, dass es ein neues Versprechen zurückgibt und es ist dieses neue Versprechen, das durch das beeinflusst wird, was in den Handlern geschieht.

Für weitere Informationen, lesen Sie diese Antwort: Is there a difference between promise.then.then vs promise.then; promise.then, um den Unterschied zwischen Verkettung und Verzweigung zu verstehen.

Verwandte Themen