Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →