Fehlerursachen
Stellen Sie sich vor, Sie haben eine Funktion, die zwei separate Arbeitslasten doSomeWork
und doMoreWork
aufruft. Beide Funktionen können dieselben Arten von Fehlern werfen, aber Sie müssen sie auf unterschiedliche Weise behandeln.
Das Abfangen des Fehlers und das erneute Werfen mit zusätzlichen Kontextinformationen ist ein häufiger Ansatz für dieses Problem, beispielsweise:
function doWork() {
try {
doSomeWork();
} catch (err) {
throw new CustomError('Einige Arbeiten fehlgeschlagen', err);
}
doMoreWork();
}
try {
doWork();
} catch (err) {
// Kommt |err| von |doSomeWork| oder von |doMoreWork|?
}
Leider ist die obige Lösung mühsam, da man seinen eigenen CustomError
erstellen muss. Und noch schlimmer ist, dass kein Entwicklerwerkzeug in der Lage ist, hilfreiche Diagnosen für unerwartete Ausnahmen zu liefern, da kein Konsens darüber besteht, wie diese Fehler richtig dargestellt werden.
Was bisher gefehlt hat, ist eine standardisierte Methode zur Kettung von Fehlern. JavaScript unterstützt jetzt Fehlerursachen. Im Error
-Konstruktor kann ein zusätzliches Optionsparameter mit einer cause
-Eigenschaft hinzugefügt werden, dessen Wert den Fehlerinstanzen zugewiesen wird. Fehler können dann leicht verkettet werden.
function doWork() {
try {
doSomeWork();
} catch (err) {
throw new Error('Einige Arbeiten fehlgeschlagen', { cause: err });
}
try {
doMoreWork();
} catch (err) {
throw new Error('Mehr Arbeiten fehlgeschlagen', { cause: err });
}
}
try {
doWork();
} catch (err) {
switch(err.message) {
case 'Einige Arbeiten fehlgeschlagen':
handleSomeWorkFailure(err.cause);
break;
case 'Mehr Arbeiten fehlgeschlagen':
handleMoreWorkFailure(err.cause);
break;
}
}
Diese Funktion ist ab V8 v9.3 verfügbar.