Maison  >  Article  >  interface Web  >  Le rappel du constructeur de promesse est-il exécuté de manière synchrone ou asynchrone ?

Le rappel du constructeur de promesse est-il exécuté de manière synchrone ou asynchrone ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 17:26:26691parcourir

Is the Promise Constructor Callback Executed Synchronously or Asynchronously?

Exécution asynchrone du rappel du constructeur de promesse

Question :

Dans l'extrait de code suivant :

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

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

La fonction y s'exécutera-t-elle de manière asynchrone ou synchrone ?

Réponse :

L'exécution du rappel du constructeur de promesse dépend de l'implémentation spécifique de la spécification Promises/A.

La spécification ES6, dans la section 25.4.3.1, indique que :

"Si l'exécuteur ne lève pas d'exception, l'objet Promise doit être construit en deux étapes :"

  1. La fonction exécuteur doit être appelée avec trois arguments :

    • resolve() : Une fonction que l'exécuteur peut appeler pour remplir la promesse.
    • reject() : Une fonction que l'exécuteur peut appeler pour rejeter la promesse.
    • ceci : Réservé pour une utilisation future.
  2. La fonction exécuteur doit revenir de manière synchrone.

Cependant, l'exécution ultérieure des appels .then() sur la promesse est toujours asynchrone. Cela est évident dans la section 25.4.5.3.1 de la spécification ES6, qui décrit l'algorithme « PerformPromiseThen » :

« Si la valeur de l'emplacement interne [[PromiseState]] de la promesse est « remplie », ... "
"...Perform EnqueueJob("PromiseJobs", PromiseReactionJob, «fulfillReaction, value»)."

De même, si la promesse est rejetée, l'algorithme effectue une mise en file d'attente asynchrone des tâches.

Conclusion :

Par conséquent, la fonction transmise au constructeur de promesse est exécutée de manière synchrone, tandis que les appels .then() suivants sont toujours exécutés de manière asynchrone selon la spécification ES6.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn