AAfroCodeurs
InitiéTerminée50 points

L'Énigme du Code Fantôme

Imaginée par Alou · 3 résolution(s)

En inspectant les logs du serveur après un crash mystérieux à minuit, l'équipe Devops a retrouvé ce script JavaScript laissé par l'ancien Lead Dev. Son dernier message Slack disait : "Si vous voulez comprendre ma disparition, écoutez ce que la console murmure. Mais attention : les promesses faites en cours de route priorisent toujours la vérité, tandis que les délais reportent l'inéluctable."

setTimeout(() => console.log("E"), 0); Promise.resolve().then(() => { console.log("R"); setTimeout(() => console.log("U"), 0); }); queueMicrotask(() => { console.log("E"); Promise.resolve().then(() => console.log("U")); }); console.log("E");

Explication de la solution

L'exécution suit les règles d'évaluation de l'Event Loop JavaScript : Code synchrone : console.log("E") à la fin s'exécute immédiatement. → E File des Microtâches : Le Promise.resolve().then() affiche R et programme un setTimeout ("U") dans la file des macrotâches. Le queueMicrotask() affiche E et ajoute une nouvelle microtâche (Promise.resolve()) à la suite. Cette nouvelle microtâche s'exécute avant les macrotâches et affiche U. → R-E-U File des Macrotâches : Le tout premier setTimeout s'exécute et affiche E. Le second setTimeout (créé dans la promesse) s'exécute et affiche R. (Attends, vérifions l'ordre précis ci-dessous !) Détail de l'ordre d'affichage : Synchrone : E Microtâches : R, E, puis la microtâche imbriquée U Macrotâches : premier setTimeout E, second setTimeout R Les lettres affichées dans l'ordre donnent : E - R - E - U - E - R... (qui forme le mot ERREUR).

Classement du défi

  1. #1Alou50 pts · 1 tentative(s)
  2. #2Steve Aster Afovo48 pts · 2 tentative(s)
  3. #3Isko44 pts · 4 tentative(s)