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 :"
La fonction exécuteur doit être appelée avec trois arguments :
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!