JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 9 · Exercice de TD
Le bilan d'un chargement
Programmation asynchrone · niveau 2
Énoncé
La fonction chargerLivre(isbn) renvoie une promesse, rompue si le livre est introuvable. Écrire async function bilan(isbns) qui charge tous les livres en même temps, affiche « n chargé(s), m échec(s) » puis le message de chaque échec, et renvoie le tableau des livres chargés. Pourquoi Promise.all ne convient-il pas ?
Corrigé
async function bilan(isbns) {
const resultats = await Promise.allSettled(isbns.map(chargerLivre));
const livres = resultats.filter((r) => r.status === "fulfilled").map((r) => r.value);
const erreurs = resultats.filter((r) => r.status === "rejected").map((r) => r.reason.message);
console.log(`${livres.length} chargé(s), ${erreurs.length} échec(s)`);
for (const e of erreurs) console.log(" -", e);
return livres;
}
Essayons avec une fonction chargerLivre qui échoue pour les ISBN finissant par 0 ; le programme complet est exercices/ex6-bilan.mjs :
2 chargé(s), 2 échec(s)
- livre 9782956300030 introuvable
- livre 9782956300040 introuvable
Promise.all serait rompue au premier échec : on perdrait les livres chargés et les autres erreurs.
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.