SuppressedError
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Das SuppressedError-Objekt stellt einen Fehler dar, der beim Behandeln eines anderen Fehlers erzeugt wird. Es wird bei der Ressourcenfreigabe mit using oder await using erzeugt.
Im Vergleich zu AggregateError stellt SuppressedError einen Fehler dar, der während der Behandlung eines anderen Fehlers aufgetreten ist, während AggregateError eine Liste nicht zusammenhängender Fehler darstellt. Es ist jedoch möglich, dass ein SuppressedError eine Kette unterdrückter Fehler enthält (e.suppressed.suppressed.suppressed...). Außerdem unterscheidet es sich semantisch von cause, da der Fehler nicht durch einen anderen Fehler verursacht wird, sondern bei der Behandlung eines anderen Fehlers auftritt.
SuppressedError ist eine Unterklasse von Error.
Konstruktor
SuppressedError()-
Erstellt ein neues
SuppressedError-Objekt.
Instanzeigenschaften
Erbt außerdem Instanzeigenschaften von seinem übergeordneten Error.
Diese Eigenschaften sind auf SuppressedError.prototype definiert und werden von allen SuppressedError-Instanzen gemeinsam genutzt.
SuppressedError.prototype.constructor-
Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für
SuppressedError-Instanzen ist der Anfangswert der KonstruktorSuppressedError. SuppressedError.prototype.name-
Stellt den Namen für den Fehlertyp dar. Für
SuppressedError.prototype.nameist der Anfangswert"SuppressedError".
Hinweis:
SuppressedError hat niemals die Eigenschaft cause, da sich die Semantik von cause mit suppressed überschneidet.
Diese Eigenschaften sind eigene Eigenschaften jeder SuppressedError-Instanz.
error-
Eine Referenz auf den Fehler, der zur Unterdrückung führt.
suppressed-
Eine Referenz auf den Fehler, der durch
errorunterdrückt wird.
Instanzmethoden
Erbt Instanzmethoden von seinem übergeordneten Error.
Beispiele
>Abfangen eines SuppressedError
Ein SuppressedError wird ausgelöst, wenn während der Ressourcenfreigabe ein Fehler auftritt. Das Auslösen eines Fehlers führt zur Bereinigung des Gültigkeitsbereichs, und jeder Disposer während der Bereinigung kann einen eigenen Fehler auslösen. All diese Fehler werden in einer Kette von SuppressedError-Instanzen gesammelt, wobei der ursprüngliche Fehler die Eigenschaft suppressed und der vom nächsten Disposer ausgelöste neue Fehler die Eigenschaft error erhält.
try {
using resource1 = {
[Symbol.dispose]() {
throw new Error("resource1 disposal failed");
},
};
using resource2 = {
[Symbol.dispose]() {
throw new Error("resource2 disposal failed");
},
};
throw new TypeError("Original error");
} catch (e) {
console.log(e instanceof SuppressedError); // true
console.log(e.message); // "An error was suppressed during disposal"
console.log(e.name); // "SuppressedError"
console.log(e.error); // Error: resource1 disposal failed
console.log(e.suppressed); // SuppressedError: An error was suppressed during disposal
console.log(e.suppressed.error); // Error: resource2 disposal failed
console.log(e.suppressed.suppressed); // TypeError: Original error
}
Die Kette sieht folgendermaßen aus:
SuppressedError --suppressed--> SuppressedError --suppressed--> TypeError
| |
error error
| |
v v
resource1 disposal failed resource2 disposal failed
(Disposal happens later) (Disposal happens earlier)
Erstellen eines SuppressedError
try {
throw new SuppressedError(
new Error("New error"),
new Error("Original error"),
"Hello",
);
} catch (e) {
console.log(e instanceof SuppressedError); // true
console.log(e.message); // "Hello"
console.log(e.name); // "SuppressedError"
console.log(e.error); // Error: "New error"
console.log(e.suppressed); // Error: "Original error"
}
Spezifikationen
| Spezifikation |
|---|
| ECMAScript Async Explicit Resource Management> # sec-suppressederror-objects> |