Baue eine explizite Fehlerstrategie mit eigenen Klassen, gut platzierten catch-Grenzen und einer Konsole, die du voll ausnutzt.
Diese Lektion in Kodokon öffnenBei Robustheit geht es nicht darum, jeden Fehler abzufangen, sondern ihn an der richtigen Stelle abzufangen. Faustregel aus der Praxis: Scheitere schnell und laut, so nah wie möglich am Bug (Validierung, Invarianten), und fange nur an den Grenzen ab, an denen du wirklich reagieren kannst: eine Meldung zeigen, erneut versuchen, protokollieren. Ein try/catch, das nichts Nützliches tut, macht den Code nicht sicherer; es macht Fehler stumm.
function parseConfig(json) {
try {
return JSON.parse(json);
} catch (error) {
console.error("Unreadable config:", error.message);
throw error; // rethrow: nothing can be fixed here
} finally {
console.log("Finished reading configuration");
}
}Reine Zeichenketten ergeben keine Fehlerstrategie. Erweitere Error, um Klassen zu erstellen, die strukturierte Daten tragen (HTTP-Status, ungültiges Feld) und die sich mit instanceof unterscheiden lassen. Seit ES2022 verkettet die cause-Option den ursprünglichen Fehler mit dem übergeordneten: Du legst eine klare fachliche Meldung offen, ohne die technische Spur zu verlieren.
class ApiError extends Error {
constructor(message, status, options) {
super(message, options);
this.name = "ApiError";
this.status = status;
}
}
try {
const low = new Error("socket timeout");
throw new ApiError("Profile unavailable", 503,
{ cause: low });
} catch (error) {
if (error instanceof ApiError) {
console.error(error.status, error.cause.message);
}
}Die Konsole bietet viel mehr als log: console.table reiht Sammlungen von Objekten auf, group/groupEnd verschachtelt die Ausgabe, time/timeEnd misst eine Dauer, console.assert protokolliert nur, wenn die Bedingung falsch ist, und console.trace gibt den aktuellen Aufrufstapel aus. Zusammen schlagen diese Werkzeuge einen Regen anonymer log-Aufrufe mit Leichtigkeit.
const users = [
{ name: "Ada", role: "admin" },
{ name: "Linus", role: "dev" },
];
console.table(users);
console.group("Checks");
console.assert(users.length > 0, "Empty list");
console.time("sort");
users.sort((a, b) => a.name.localeCompare(b.name));
console.timeEnd("sort");
console.groupEnd();finally-Block?cause-Option beim Erzeugen eines Fehlers da?console.assert(condition, message)?