Pourquoi ce setTimeout(0) s'exécute-t-il après cette Promise ? Déroulez l'event loop pas à pas sur des exemples concrets.
Exemples préparés (l'outil n'exécute pas de code arbitraire) : chaque étape est tracée à la main pour rester fidèle au comportement réel du moteur.
Un seul thread, plusieurs files d'attente. Le moteur exécute la pile d'appels, délègue l'asynchrone aux Web APIs, et la boucle ré-injecte les tâches prêtes — microtâches d'abord, puis une macrotâche.
La boucle ne dépile une tâche que lorsque la pile d'appels est vide. À chaque tour, elle vide d'abord toutes les microtâches (Promesses), puis exécute une seule macrotâche (setTimeout) — et recommence.
C'est pourquoi un Promise.then s'exécute toujours avant un setTimeout(…, 0) programmé au même instant.
Call stack
Microtâches (Promise)
Macrotâches (setTimeout)
Console