Warum setzt javascript ES6 Promises die Ausführung nach einer Behebung fort?
So wie ich das verstehe ein Versprechen ist etwas, das kann in resolve() oder reject (), aber ich war überrascht zu erfahren, dass code in das Versprechen, weiterhin ausgeführt werden, nachdem ein resolve oder reject aufgerufen wird.
Als ich auflösen, ablehnen, oder ein async-freundliche version der exit oder return , das wäre halt alle unmittelbaren Ausführung der Funktion.
Kann jemand erklären, der Gedanke dahinter, warum das folgende Beispiel manchmal zeigt die Konsole.melden Sie nach einer Behebung nennen:
var call = function() {
return new Promise(function(resolve, reject) {
resolve();
console.log("Doing more stuff, should not be visible after a resolve!");
});
};
call().then(function() {
console.log("resolved");
});
InformationsquelleAutor der Frage Ludwig Van Beethoven | 2015-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
JavaScript hat das Konzept der "run to completion". Es sei denn, es wird ein Fehler ausgelöst, wird eine Funktion ausgeführt, bis eine
return
Aussage oder sein Ende erreicht ist. Anderen code außerhalb der Funktion nicht beeinträchtigen (es sei denn, wieder ein Fehler geworfen wird).Wenn Sie wollen
resolve()
zu beenden Sie Ihre initialiser Funktion, die Sie haben, um Sie voranzustellen vonreturn
:InformationsquelleAutor der Antwort Felix Kling
Die callbacks werden aufgerufen, wenn Sie
resolve
eine Zusage sind noch erforderlich, durch die Spezifikation asynchron aufgerufen werden. Dies ist, um sicherzustellen, konsequentes Verhalten, wenn Sie mit Versprechungen für eine Mischung aus synchronen und asynchronen Aktionen.Daher beim aufrufen
resolve
den Rückruf ist in der WarteschlangeFunktion und Ausführung weiterhin sofort mit jeder code nach derresolve()
nennen.Nur einmal die JS-event-Schleife ist wieder Kontrolle kann die callback-werden aus der Warteschlange entfernt und tatsächlich aufgerufen wird.
InformationsquelleAutor der Antwort Alnitak