Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 Konstruktor SuppressedError.

SuppressedError.prototype.name

Stellt den Namen für den Fehlertyp dar. Für SuppressedError.prototype.name ist 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 error unterdrü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.

js
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

js
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

Browser-Kompatibilität

Siehe auch