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
Libérer: 2024-10-30 12:06:26
original
504 Les gens l'ont consulté

 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>
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal