console.log(response ))}).alors((("> Ordre d'exécution de la promesse imbriquée-Questions et réponses sur le réseau chinois PHP
Ordre d'exécution de la promesse imbriquée
P粉459440991
P粉459440991 2023-08-16 19:20:33
0
2
438

Je lisais des informations sur les promesses imbriquées et je suis tombé sur ce défi de codage dans un didacticiel. Quelqu'un peut-il expliquer l'ordre d'exécution de ce code ?

nouvelle promesse((resolve) => { nouvelle promesse ((res) => { console.log("c"); résoudre (3); res(2); }).then((réponse) => console.log(réponse)) }).then((res) => console.log(res));

J'ai exécuté ce code et le résultat était :

c 2 3≪/pré> 

Mais je m'attendais à ce que le résultat soit :

c 3 2&Lt ;/pré> ; 

Parce que la promesse extérieure est résolue en premier, puis la promesse intérieure est résolue plus tard.

P粉459440991
P粉459440991

répondre à tous (2)
P粉770375450

En plus de la réponse de Nicholas, vous pourriez être bloqué par l'utilisation répétée de l'identifiant 'res'. La première utilisation d'une promesse en interne est comme fonction de rappel, qui renvoie la valeur 2 à la promesse. La deuxième utilisation dans la dernière ligne a une portée différente et est utilisée comme nom de paramètre pour la méthode .then() de la promesse externe. Cela pourrait être utile si vous remplacez « res » dans la dernière ligne par « outerPromiseResult », pour clarifier les choses.

    P粉493534105

    En bref, c'est à cause de l'ordre dans lequel vous appelez.then.

    new Promise((resolve) => { new Promise((res) => { console.log("c"); resolve(3); res(2);

    Dans le code ci-dessus, nous entrons dans le constructeur externe, qui appelle immédiatement la fonction externe. Créez ensuite une promesse interne et appelez la fonction interne. La fonction interne enregistre "c", puis résout la promesse externe en 3, puis résout la promesse interne en 2.

    Donc, à ce stade, nous avons 2 promesses résolues, mais aucun code essayant de les utiliser.

    }).then((response) => console.log(response))

    Après avoir fini de construire la Promesse intérieure, nous faisons appel à.thenla Promesse intérieure. Une fois la promesse résolue, une microtâche est mise en file d'attente à exécuter.

    }).then((res) => console.log(res));

    Après avoir fini de construire la Promesse externe, nous faisons appel à.thensur la Promesse externe. Une fois la promesse résolue, une microtâche est mise en file d'attente à exécuter.

    Maintenant, nous avons fini d'exécuter tout le code synchrone. La pile d'appels est vide et la microtâche commence à s'exécuter. Celles-ci sont exécutées dans l'ordre premier entré, premier sorti, de sorte que les microtâches liées à la promesse interne s'exécutent en premier, enregistrement 2. Exécutez ensuite les microtâches restantes et enregistrez-en 3.

      Derniers téléchargements
      Plus>
      effets Web
      Code source du site Web
      Matériel du site Web
      Modèle frontal
      À propos de nous Clause de non-responsabilité Sitemap
      Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!