Sobes.tech
Middle+

/* Que sera affiché dans la console */ async function f() { console.log(1); const promise = new Promise((resolve) => { console.log(2); setTimeout(() => { console.log(3); resolve("Prêt!"); console.log(4); }); }); console.log(5); const result = await promise; console.log(6); console.log(result); return "Résultat"; } f(); console.log(7);

sobes.tech IA

Réponse de l'IA

Considérons la séquence de sortie dans la console:

async function f() {
  console.log(1); // 1
  const promise = new Promise((resolve) => {
    console.log(2); // 2
    setTimeout(() => {
      console.log(3); // 3 (environ 0 ms)
      resolve("prêt!");
      console.log(4); // 4
    });
  });
  console.log(5); // 5

  const result = await promise; // attend la résolution de la promesse
  console.log(6); // 6
  console.log(result); // "prêt!"
  return "Résultat";
}

f();
console.log(7); // 7

Explication de l'ordre d'affichage:

  1. console.log(1); — synchrone
  2. console.log(2); — synchrone lors de la création de la promesse
  3. console.log(5); — synchrone après la création de la promesse
  4. console.log(7); — synchrone après l'appel à f()

Ensuite, le setTimeout (microtâche) est déclenché:

  1. console.log(3);
  2. console.log(4);

Après que la promesse est résolue avec resolve, elle passe à l'état fulfilled, et await continue l'exécution:

  1. console.log(6);
  2. console.log(result); — affiche "prêt!"

La séquence totale de sortie est:

1
2
5
7
3
4
6
prêt!