Maison >interface Web >js tutoriel >La fonction d'exécution du constructeur de promesse est-elle synchrone ou asynchrone ?

La fonction d'exécution du constructeur de promesse est-elle synchrone ou asynchrone ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 12:06:26505parcourir

 Is the Promise Constructor’s Executor Function Synchronous or Asynchronous?

Exécution asynchrone du rappel du constructeur de promesse

Le constructeur de promesse accepte une fonction d'exécuteur qui définit la logique d'exécution de la promesse. Une question clé se pose : cette fonction d'exécuteur est-elle exécutée de manière asynchrone ou synchrone ?

Réponse détaillée

Le comportement dépend de la mise en œuvre de la Promesse elle-même. Cependant, le standard ES6 pour les promesses stipule explicitement que l'accomplissement d'une promesse est toujours asynchrone.

En nous référant à la spécification, nous constatons que la fonction exécuteur (dans notre cas, la fonction y ) est en effet exécuté de manière synchrone (voir étape 10 de la spécification). Cependant, les appels ultérieurs à .then() sur la promesse, tels que promise.then(...), sont toujours exécutés de manière asynchrone (voir l'étape 8 de l'algorithme "PerformPromiseThen").

Implications

Cette nature asynchrone des appels .then() a plusieurs implications :

  • Si la fonction exécuteur modifie des variables ou effectue des effets secondaires, ces modifications peuvent ne pas être immédiatement visibles par le .then( ) handler.
  • .then() Les gestionnaires peuvent être utilisés pour planifier des tâches qui doivent être exécutées une fois la boucle d'événements en cours terminée.
  • Ce comportement asynchrone garantit que les promesses peuvent être utilisées pour enchaîner plusieurs événements asynchrones. opérations et gérer leurs résultats de manière séquentielle.

Exemple de code

Considérez l'extrait de code suivant :

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

var promise = new Promise(y);
promise.then(() => {
  console.log("Then handler executed after the synchronous execution of y");
});</code>

Dans cet exemple, la fonction y est exécutée de manière synchrone. Cependant, le gestionnaire .then() est exécuté de manière asynchrone une fois la boucle d'événements terminée. La sortie de ce code sera :

Result
Then handler executed after the synchronous execution of y

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