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

View in English Always switch to English

DisposableStack.prototype.dispose()

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.

Die Methode dispose() von DisposableStack-Instanzen gibt die Ressourcen dieses Stacks frei, indem sie alle für ihn registrierten Disposer in umgekehrter Reihenfolge ihrer Registrierung aufruft. Wenn die Ressourcen des Stacks bereits freigegeben wurden, bewirkt diese Methode nichts.

Sie führt dieselbe Aktion aus wie using disposer = new DisposableStack() beim Verlassen des Gültigkeitsbereichs. Sie können sie verwenden, wenn die Bereinigung zu einem anderen Zeitpunkt erfolgen soll.

Syntax

js
dispose()

Parameter

Keine.

Rückgabewert

Keiner (undefined).

Ausnahmen

SuppressedError

Wird ausgelöst, wenn mehrere Disposer im Stack einen Fehler auslösen. Wird nur ein Fehler ausgelöst, wird dieser unverändert erneut ausgelöst. Andernfalls wird für jeden weiteren Fehler ein neuer SuppressedError erstellt, wobei der ursprüngliche Fehler in der Eigenschaft suppressed und der neue Fehler in der Eigenschaft error gespeichert wird.

Beispiele

Ressourcen eines Stacks freigeben

Hier fügen wir dem Stack mit den Methoden use(), adopt() und defer() drei Disposer hinzu. Wenn dispose() aufgerufen wird, werden die Disposer in umgekehrter Reihenfolge ihrer Registrierung aufgerufen.

Beachten Sie, dass Sie dispose() normalerweise nicht manuell aufrufen müssen. Deklarieren Sie den Stack mit using. Seine Methode [Symbol.dispose]() wird dann automatisch aufgerufen, wenn der Stack seinen Gültigkeitsbereich verlässt.

js
class Resource {
  dispose() {
    console.log("Resource disposed");
  }
  [Symbol.dispose]() {
    console.log("Resource disposed via Symbol.dispose");
  }
}

{
  const disposer = new DisposableStack();
  const resource = disposer.use(new Resource());
  const resource2 = disposer.adopt(new Resource(), (resource) =>
    resource.dispose(),
  );
  disposer.defer(() => console.log("Deferred disposer"));
  disposer.dispose();
  // Logs in order:
  // Deferred disposer
  // Resource disposed
  // Resource disposed via Symbol.dispose
}

Spezifikationen

Spezifikation
ECMAScript Async Explicit Resource Management
# sec-disposablestack.prototype.dispose

Browser-Kompatibilität

Siehe auch