JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 9 · Application directe du cours
Tâches et microtâches
Programmation asynchrone · niveau 3 (difficile)
Énoncé
Prévoir l'ordre des huit affichages, en appliquant la méthode du cours (étape par étape, avec l'état des deux files).
console.log("1");
setTimeout(() => console.log("2"), 0);
Promise.resolve("3").then((x) => {
console.log(x);
setTimeout(() => console.log("4"), 0);
return "5";
}).then((x) => console.log(x));
(async () => {
console.log("6");
await null;
console.log("7");
})();
console.log("8");Corrigé
- Code synchrone : affiche 1 ; programme la tâche « 2 » ;
Promise.resolve("3")est déjà tenue, sonthenentre dans la file des microtâches (appelons-le m1) ; la fonction fléchéeasyncest appelée : elle affiche 6, puisawait nullla suspend, sa suite (m2) entre dans les microtâches ; affiche 8. Microtâches : [m1, m2] ; tâches : [2]. - m1 affiche 3, programme la tâche « 4 », renvoie "5" : la promesse suivante est tenue, son
then(m3) entre dans la file. Microtâches : [m2, m3] ; tâches : [2, 4]. - m2 affiche 7 ; m3 affiche 5. Microtâches vides.
- Tâche « 2 », puis tâche « 4 ».
L'ordre est donc 1, 6, 8, 3, 7, 5, 2, 4 : c'est bien celui qu'affiche Node pour le programme exercices/ex2-micro.mjs. Le piège : croire que « 5 » suit immédiatement « 3 ». Le second then n'entre dans la file qu'au retour du premier, derrière la suite de la fonction asynchrone.
100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.