AAfroCodeurs
ExplorateurTerminée100 points

L'Écho Asynchrone

Imaginée par Dylan · 7 résolution(s)

Un stagiaire a laissé ce script dans le dépôt avant de partir en congé, avec un commentaire énigmatique : "la console ne ment jamais, mais elle n'aime pas qu'on la lise dans le désordre." En exécutant le fichier, cinq lettres s'affichent dans la console — mais jamais dans l'ordre où elles apparaissent dans le code.

Voici le script :

setTimeout(() => console.log("N"), 0); console.log("A"); Promise.resolve().then(() => console.log("S")); setTimeout(() => console.log("C"), 0); queueMicrotask(() => console.log("Y"));

Sans l'exécuter, détermine l'ordre exact dans lequel les lettres s'affichent dans la console, puis assemble-les pour former un mot de 5 lettres lié au thème de cette énigme.

Explication de la solution

La clé est de séparer trois files distinctes et de respecter leur ordre de traitement :

  1. Code synchrone — s'exécute immédiatement, dans l'ordre du fichier. Seul console.log("A") est synchrone → il s'affiche en premier : A

  2. File des microtâches (Promise.then, queueMicrotask) — entièrement vidée avant la moindre macrotâche, dans l'ordre où les callbacks ont été MIS EN FILE (pas leur ordre visuel dans le code) :

    • Promise.resolve().then(...) met "S" en file en premier
    • queueMicrotask(...) met "Y" en file en second → S puis Y
  3. File des macrotâches (setTimeout) — traitée après que toutes les microtâches sont vidées, dans l'ordre de programmation :

    • premier setTimeout programmé affiche "N"
    • second setTimeout programmé affiche "C" → N puis C

Ordre final dans la console : A, S, Y, N, C → ASYNC

Le piège : les deux setTimeout sont écrits en premier et en quatrième position dans le code, ce qui donne l'illusion qu'ils s'exécutent tôt. En réalité, TOUT code asynchrone attend que la pile d'appels soit vide, et les microtâches passent toujours avant les macrotâches, même à délai 0.

Classement du défi

  1. #1@Obed100 pts · 1 tentative(s)
  2. #2Emmanuel Savadogo100 pts · 1 tentative(s)
  3. #3code scooper100 pts · 1 tentative(s)
  4. #4Steve Aster Afovo100 pts · 1 tentative(s)
  5. #5Alou100 pts · 1 tentative(s)
  6. #6mistert_tehill100 pts · 1 tentative(s)
  7. #7Anwtta97 pts · 2 tentative(s)