Comprendre l'ordre d'exécution de la promesse
En JavaScript, les promesses sont utilisées pour gérer les opérations asynchrones. L'ordre d'exécution des gestionnaires de promesses peut prêter à confusion, surtout lorsqu'il y a des promesses imbriquées.
Analyse ligne par ligne du code
Analysons la ligne de code fournie par ligne pour comprendre l'ordre d'exécution :
1. Promise.resolve('A')
.then(function(a){console.log(2, a); return 'B';})
.then(function(a){
Promise.resolve('C')
.then(function(a){console.log(7, a);})
.then(function(a){console.log(8, a);});
console.log(3, a);
return 'B';})
.then(function(a){
Promise.resolve('D')
.then(function(a){console.log(9, a);})
.then(function(a){console.log(10, a);});
console.log(4, a);})
.then(function(a){
console.log(5, a);});
Copier après la connexion
-
Ligne 1 : Crée une promesse qui se résout immédiatement en « A » et y attache un gestionnaire .then().
-
Ligne 2 : La console enregistre « 2 » lorsque la promesse est résolue par « A » et renvoie « B ».
-
Ligne 5 : Un autre Le gestionnaire .then() est ajouté à la promesse créée dans la ligne 1.
-
Lignes 6-8 : Crée une nouvelle promesse qui se résout en « C » et attache deux gestionnaires .then() cette console enregistre respectivement '7' et '8'.
-
Ligne 10 : La console enregistre '3' et renvoie 'B'.
-
Ligne 12- 14 : Un autre gestionnaire .then() est ajouté à la promesse créée à la ligne 5.
-
Lignes 15-17 : Crée une nouvelle promesse qui se résout en « D » et s'attache deux gestionnaires .then() qui consolent respectivement « 9 » et « 10 ».
-
Ligne 19 : La console enregistre « 4 ».
-
Ligne 22 -24 : Un autre gestionnaire .then() est ajouté à la promesse créée à la ligne 12.
-
Ligne 27 : La console enregistre « 5 » lorsque la promesse est résolue.
Ordre d'exécution
-
Ligne 1 : Promesse résolue, la console enregistre "2 A"
-
Ligne 10 : Journaux de la console "3 B"
-
Ligne 19 : Journaux de la console "4 B"
-
Ligne 27 : Journaux de la console "5 non défini"
-
Ligne 7 : Journaux de la console "7 C"
-
Ligne 8 : Journaux de la console "8 non défini"
-
Ligne 15 : Journaux de la console "9 D"
-
Ligne 17 : Journaux de la console "10 non défini"
-
Ligne 30 : Journaux de la console "1"
-
Ligne 33 : Journaux de la console "6"
Discussion
- Les gestionnaires de promesses sont planifiés de manière asynchrone, ils s'exécutent donc une fois le thread d'exécution en cours terminé.
- Les promesses imbriquées créent des chaînes de promesses indépendantes qui n'ont pas d'ordre d'exécution prédéterminé.
- L'ordre de l'exécution des promesses dépend de la mise en œuvre du moteur de promesses. Dans ce cas, le moteur utilisé planifie les micro-tâches (gestionnaires de promesses) avant les macro-tâches (setTimeout()).
- S'appuyer sur un ordre d'exécution spécifique pour les promesses imbriquées n'est pas recommandé. Au lieu de cela, la chaîne promet explicitement de contrôler son ordre d'exécution.
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!