Heim >Web-Frontend >js-Tutorial >Wird der Promise-Konstruktor-Callback synchron oder asynchron ausgeführt?

Wird der Promise-Konstruktor-Callback synchron oder asynchron ausgeführt?

Linda Hamilton
Linda HamiltonOriginal
2024-10-30 17:26:26752Durchsuche

Is the Promise Constructor Callback Executed Synchronously or Asynchronously?

Asynchrone Ausführung des Promise-Konstruktor-Rückrufs

Frage:

Im folgenden Codeausschnitt:

<code class="python">function y(resolve, reject)
{
  console.log("Result");
  resolve();
}  

var promise = new Promise(y);</code>

Wird die y-Funktion asynchron oder synchron ausgeführt?

Antwort:

Die Ausführung des Promise-Konstruktor-Callbacks hängt von der spezifischen Implementierung ab der Promises/A-Spezifikation.

Die ES6-Spezifikation besagt in Abschnitt 25.4.3.1:

„Wenn Executor keine Ausnahme auslöst, wird das Promise-Objekt muss in zwei Schritten erstellt werden: „

  1. Die Executor-Funktion muss mit drei Argumenten aufgerufen werden:

    • resolve(): Eine Funktion, die der Executor aufrufen kann um das Versprechen zu erfüllen.
    • reject(): Eine Funktion, die der Ausführende aufrufen kann, um das Versprechen abzulehnen.
    • dies: Für zukünftige Verwendung reserviert.
  2. Die Executor-Funktion muss synchron zurückkehren.

Die anschließende Ausführung von .then()-Aufrufen auf das Versprechen erfolgt jedoch immer asynchron. Dies geht aus Abschnitt 25.4.5.3.1 der ES6-Spezifikation hervor, in der der „PerformPromiseThen“-Algorithmus beschrieben wird:

„Wenn der Wert des internen [[PromiseState]]-Slots des Versprechens „erfüllt“ ist, ... "
"...Perform EnqueueJob("PromiseJobs", PromiseReactionJob, «fulfillReaction, value»)."

In ähnlicher Weise führt der Algorithmus eine asynchrone Job-Einreihung durch, wenn das Versprechen abgelehnt wird.

Fazit:

Daher wird die an den Promise-Konstruktor übergebene Funktion synchron ausgeführt, während nachfolgende .then()-Aufrufe gemäß der ES6-Spezifikation immer asynchron ausgeführt werden.

Das obige ist der detaillierte Inhalt vonWird der Promise-Konstruktor-Callback synchron oder asynchron ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn