Sagen wir, ich habe ein Versprechen wie folgt:
%Vor%Was passiert, wenn das asynchrone Versprechen abgeschlossen wird, bevor ich anrufe? Normalerweise hätte ich nur lange Aufgaben in der Versprechen-Funktion, aber was, wenn es wirklich schnell einmal abgeschlossen wird?
Wie andere bereits erwähnt haben, können Sie Callbacks mit .then
hinzufügen, bevor oder nachdem das Versprechen gelöst wurde, und Sie können sogar mehr als einen Callback hinzufügen.
Diese Callbacks werden in der Reihenfolge aufgerufen, in der sie hinzugefügt wurden, aber immer asynchron, nach der aktuellen Drehung der Ereignisschleife. Wenn also das Versprechen bereits gelöst wurde, wenn Sie ein .then
hinzufügen, wird Ihr Handler sofort aufgerufen, aber im "asynchronen Sinn".
Die Promises / A + -Spezifikation lautet:
[...]
onFulfilled
undonRejected
werden asynchron ausgeführt, nach der Ereignisschleife, in derthen
aufgerufen wird, und mit einem neuen Stapel.
Ein Versprechen hat einen Status, was bedeutet, dass Sie auch nach der Erfüllung des Versprechens Callbacks mit .then
anhängen können, und sie werden aufgerufen, mit dem gleichen Ergebnis, als wäre das Versprechen nach dem Anhängen erfüllt.
Erfüllt ist der Endzustand eines erfolgreichen Versprechens. Das bedeutet, dass Sie in Zukunft mehr Handler an das erfüllte Versprechen anfügen können, indem Sie das Versprechen als Cache für die ursprüngliche Antwort verwenden.
dann ()
Ruft eine der bereitgestellten Funktionen auf, sobald dieses Versprechen erfüllt ist erfüllt oder abgelehnt. Ein neues Versprechen wird zurückgegeben, dessen Zustand sich entwickelt abhängig von dieser Zusage und den bereitgestellten Callback-Funktionen.
Der entsprechende Callback wird immer aufgerufen, nachdem diese Methode zurückgegeben wurde. auch wenn dieses Versprechen bereits erfüllt oder abgelehnt wird. Du kannst auch Rufen Sie die then-Methode mehrmals auf die gleiche Verheißung, und die Callbacks werden in derselben Reihenfolge aufgerufen, in der sie registriert wurden.
Der then
Callback wird niemals aufgerufen, bevor das Versprechen resolved
ist. Das ist es, was Sie mit "complete" meinen. Wenn eine Zusage jedoch aufgelöst wird, bevor sie von einer Funktion zurückgegeben wird, werden alle weiteren Erfolgsrückrufe, die nach diesem Zeitpunkt verkettet sind, weiterhin ausgeführt. Zum Beispiel
Tags und Links javascript promise