Problème
Considérez le code JavaScript suivant qui utilise des promesses :
<code class="javascript">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 a;}) .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);}); console.log(1); setTimeout(function(){console.log(6)},0);</code>
Le résultat est le suivant :
<code class="text">1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6</code>
La question concerne l'ordre d'exécution, en particulier les nombres 1, 2, 3, 7, etc. Pourquoi n'est-ce pas l'ordre linéaire attendu 1, 2, 3, 4, ... ?
Les promesses JavaScript suivent des règles d'exécution spécifiques :
Dans le code donné :
Étant donné que les chaînes de promesses indépendantes créées dans les gestionnaires .then() n'ont pas d'ordre d'exécution prévisible, l'ordre de 3, 7, 4, 8, 9, 5, 10 dépend du implémentation d'un moteur de promesse spécifique.
Pour garantir un ordre d'exécution spécifique pour les opérations asynchrones, il est recommandé de :
Dans l'exemple donné, renvoyer la promesse Promise.resolve('C') à partir du .then( ) le gestionnaire de la ligne 4 relierait les chaînes de promesses et entraînerait l'ordre d'exécution séquentiel attendu.
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!