javascript / expert
Snippet
Hierarchische benutzerdefinierte Fehlerketten mit Error Cause-Traversierung
ES2022 führte eine native Fehlerverkettung unter Verwendung der Option cause im Error-Konstruktor ein. Durch Erweitern von Error in benutzerdefinierte Domänenklassen können Entwickler tiefere System- oder Treiberfehler in einen höherstufigen Anwendungs-Kontext einbetten und gleichzeitig prüfbare Fehlerketten beibehalten, die rekursiv traversiert werden können.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ApplicationError extends Error {constructor(message, options = {}) {super(message, options);this.name = this.constructor.name;}getRootCause() {let current = this;while (current.cause instanceof Error) {current = current.cause;}return current;}}class DatabaseConnectionError extends ApplicationError {}const rootDbErr = new Error('ECONNREFUSED 127.0.0.1:5432');const dbErr = new DatabaseConnectionError('Failed to query user records', { cause: rootDbErr });console.log(dbErr.getRootCause().message);
nodejs
Erklärung
1
super(message, options);
Ruft den Basis-Error-Konstruktor auf und hängt die native Eigenschaft cause an, falls in options angegeben.
2
this.name = this.constructor.name;
Setzt den Fehlernamen dynamisch entsprechend dem Bezeichner des abgeleiteten Klassenkonstruktors.
3
while (current.cause instanceof Error)
Durchläuft den geschachtelten cause-Eigenschaftenbaum rekursiv, um den tiefsten Fehler zu finden.
4
{ cause: rootDbErr }
Standardisierte ES2022-Eigenschaft, die die ursprüngliche Low-Level-Ausnahme im Fehler höherer Ebene bewahrt.