Comprendre l'event loop en JavaScript : pourquoi les microtasks s'exécutent avant les tasks
Comprendre l'event loop en JavaScript : pourquoi les microtasks s'exécutent avant les tasks
En JavaScript, l'event loop gère l'ordre d'exécution des tâches asynchrones en distinguant deux files d'attente : la task queue (pour les macros-tâches comme setTimeout) et la microtask queue (pour les micro-tâches comme les Promesses). La règle fondamentale est que la microtask queue est toujours vidée avant la task queue. Ainsi, même si un setTimeout a un délai de 0 milliseconde, il reste une macro-tâche et sera exécuté après les micro-tâches.
Exemple :
Considérons ce code :
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
console.log('D');
- Le code synchrone s'exécute d'abord : on voit A puis D.
- La fonction de
setTimeoutest placée dans la task queue. - La fonction de la Promesse est placée dans la microtask queue.
- L'event loop vide la microtask queue : on voit C.
- Enfin, il vide la task queue : on voit B.
L'ordre final est donc A, D, C, B. Cette logique s'applique aussi à await, qui se comporte comme une micro-tâche.