La boucle d’événements
Fait partie de la section Les bases de Node.js du Journey Node.js de Coddy. Leçon 18 sur 24.
Les rappels et les promesses s’exécutent plus tard, et les bogues se cachent dans le fait de ne pas savoir exactement quand.
Node exécute d’abord tout le code synchrone jusqu’à la fin. Ensuite, il exécute les microtâches : les rappels des promesses et les fonctions transmises à queueMicrotask. Ce n’est qu’ensuite que viennent les minuteries, même setTimeout(fn, 0), chacune lorsque son délai est écoulé.
setTimeout(() => console.log('C timer'), 0);
Promise.resolve().then(() => console.log('B promise'));
console.log('A sync');
// A sync, B promise, C timerUn délai de 0 signifie dès que possible après les microtâches, jamais avant elles. Les minuteries se déclenchent dans l’ordre de leur délai ; en cas de délais égaux, celle qui a été programmée en premier se déclenche en premier.
Défi
Facileorder.jsaffiche1 sync,2 microtask,3 timeout,4 timeout later, dans cet ordre.- Garde les quatre lignes à leur place. Enveloppe-les dans un appel à
queueMicrotasket deux appels àsetTimeout.
Exécute node order.js et compare le résultat à ta prédiction. Donne ensuite un délai de 0 aux deux minuteries et exécute le programme à nouveau.
Essayez vous-même
// Fais afficher ces lignes dans l’ordre numérique sans les déplacer.
// Encapsule-les plutôt dans queueMicrotask et setTimeout.
console.log('4 timeout later');
console.log('3 timeout');
console.log('2 microtask');
console.log('1 sync');
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les bases de Node.js
1Exécuter JavaScript avec Node
Bonjour, NodeArguments de ligne de commandeCommandes4Node asynchrone
Fonctions de rappelPromesses