Vous pouvez le voir ci-dessous le corps est exécuté immédiatement, juste en mettant le code synchrone dans le corps plutôt que asynchrone:
function doSomethingAsynchronous() {
return new Promise((resolve) => {
console.log("a");
resolve("promise result");
});
}
doSomethingAsynchronous();console.log("b");
Le résultat montre que la promesse corps est exécuté immédiatement (avant le " b " est imprimé):
a
b
Le résultat de la Promesse est retenu pour être publié à la une", puis " appel par exemple:
doSomethingAsynchronous().then(function(pr){console.log("c:"+pr);});console.log("b");
Résultat:
a
b
c:promise result
Même chose avec le code asynchrone dans le corps, à l'exception de la durée indéterminée de retard avant que la promesse est accomplie et puis peut être appelé (point 'c'). Donc, 'a' et 'b' sera imprimé dès que doSomethingAsynchronous()
de retours, mais " c " s'affiche uniquement lorsque la promesse est accomplie ('résoudre' est appelé).
Ce qui semble étrange à la surface, une fois que l'appel à 'puis' est ajouté, est que " b "est imprimé avant le "c", même quand tout est synchrone. Sûrement " a "serait d'impression, puis" c "et enfin "b"? La raison pour laquelle 'a', 'b' et 'c' sont imprimées dans l'ordre parce que, peu importe si le code dans le corps est asynchrone ou de synchronisation, l'", puis " la méthode est toujours appelée de façon asynchrone par la Promesse.
Dans mon esprit, j'imagine que le "puis" méthode invoquée par quelque chose comme setTimeout(function(){then(pr);},0);
dans la Promesse une fois 'résoudre' est appelé. I. e. l'exécution en cours de chemin doit se terminer avant que la fonction transmise vers", puis " sera exécuté.
Pas évident à partir de la Promesse de spécification pourquoi il le fait. Ma conjecture est qu'il garantit la cohérence des comportements concernant le moment", puis " s'appelle (toujours après l'exécution du thread se termine) qui est sans doute pour permettre de multiples Promises
à être empilés/enchaînés avant le coup d'envoi de tous les then
des appels dans la succession.