Construisez une stratégie d'erreurs explicite avec des classes dédiées, des frontières de capture bien placées et une console exploitée à fond.
Ouvrir cette leçon dans KodokonLa robustesse ne consiste pas à attraper toutes les erreurs, mais à les attraper au bon endroit. Règle de terrain : échouez vite et bruyamment au plus près du bug (validation, invariants), et ne capturez qu'aux frontières où vous pouvez réellement réagir : afficher un message, réessayer, journaliser. Un try/catch qui ne fait rien d'utile ne rend pas le code plus sûr, il rend les pannes silencieuses.
function parseConfig(json) {
try {
return JSON.parse(json);
} catch (error) {
console.error("Config illisible :", error.message);
throw error; // on relance : impossible de réparer ici
} finally {
console.log("Lecture de configuration terminée");
}
}Les chaînes de caractères ne font pas une stratégie d'erreurs. Étendez Error pour créer des classes porteuses de données structurées (code HTTP, champ invalide) et discriminables via instanceof. Depuis ES2022, l'option cause chaîne l'erreur d'origine à l'erreur de haut niveau : vous exposez un message métier clair sans perdre la trace technique.
class ApiError extends Error {
constructor(message, status, options) {
super(message, options);
this.name = "ApiError";
this.status = status;
}
}
try {
const low = new Error("timeout socket");
throw new ApiError("Profil inaccessible", 503,
{ cause: low });
} catch (error) {
if (error instanceof ApiError) {
console.error(error.status, error.cause.message);
}
}La console offre bien plus que log : console.table aligne des collections d'objets, group/groupEnd hiérarchise les sorties, time/timeEnd mesure une durée, console.assert ne journalise que si la condition est fausse, et console.trace affiche la pile d'appels courante. Combinés, ces outils remplacent avantageusement une pluie de log anonymes.
const users = [
{ name: "Ada", role: "admin" },
{ name: "Linus", role: "dev" },
];
console.table(users);
console.group("Vérifications");
console.assert(users.length > 0, "Liste vide");
console.time("tri");
users.sort((a, b) => a.name.localeCompare(b.name));
console.timeEnd("tri");
console.groupEnd();finally s'exécute-t-il ?cause lors de la construction d'une erreur ?console.assert(condition, message) ?