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

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 DisposableStack-Objekt repräsentiert einen Stapel von Disposer-Funktionen, die ausgeführt werden, wenn der Stapel selbst freigegeben wird. Die Disposer-Funktionen werden in umgekehrter Reihenfolge ihrer Registrierung ausgeführt. Dabei ist eine zuverlässige Fehlerbehandlung gewährleistet. Ein Aufruf der Methode move() überträgt die Verantwortung für den Aufruf der aktuell registrierten Disposer-Funktionen auf einen neuen DisposableStack und verhindert, dass weitere Disposer-Funktionen registriert werden.

Beschreibung

Ein DisposableStack ist hinsichtlich seiner Schnittstelle nicht genau genommen ein „Stapel“. Er bietet mehrere Methoden, um Disposer-Funktionen hinzuzufügen, aber keine Möglichkeit, eine einzelne Disposer-Funktion zu entfernen. Stattdessen werden alle Disposer-Funktionen nacheinander entfernt und ausgeführt, wenn der Stapel freigegeben wird.

Sie registrieren freizugebende Ressourcen beim DisposableStack mithilfe seiner Methoden use(), adopt() oder defer().

js
using disposer = new DisposableStack();
const reader = disposer.use(stream.getReader());

Wenn disposer anschließend seinen Gültigkeitsbereich verlässt, werden alle bei ihm registrierten Ressourcen in umgekehrter Reihenfolge ihrer Registrierung freigegeben, sofern sie nicht mit move() übertragen wurden.

Es empfiehlt sich, den Ausdruck zum Erwerb der Ressource nicht in eine separate Anweisung auszulagern, unabhängig davon, wie lang der Ausdruck ist. Sie sollten den Aufruf von use() oder adopt() immer um den Ausdruck zum Erwerb der Ressource legen, damit die Ressource sofort beim Stapel registriert wird.

js
using disposer = new DisposableStack();
const reader = stream.getReader();
disposer.use(reader);

Funktional sind diese beiden Codeausschnitte gleichwertig. Der erste ist jedoch weniger fehleranfällig, da die Ressource in einer einzigen Zeile deklariert und registriert wird. Wenn jemand zwischen der zweiten und dritten Zeile des zweiten Codeausschnitts weiteren Code einfügt, könnte ein Fehler auftreten und die Ressource nicht freigegeben werden.

Konstruktor

DisposableStack()

Erstellt ein neues DisposableStack-Objekt.

Instanzeigenschaften

Diese Eigenschaften sind auf DisposableStack.prototype definiert und werden von allen DisposableStack-Instanzen gemeinsam genutzt.

DisposableStack.prototype.constructor

Die Konstruktorfunktion, die das Instanzobjekt erstellt hat. Für DisposableStack-Instanzen ist der Anfangswert der Konstruktor DisposableStack.

DisposableStack.prototype.disposed

Schreibgeschützt. Gibt true zurück, wenn der DisposableStack freigegeben wurde, andernfalls false.

DisposableStack.prototype[Symbol.toStringTag]

Der Anfangswert der Eigenschaft [Symbol.toStringTag] ist die Zeichenfolge "DisposableStack". Diese Eigenschaft wird in Object.prototype.toString() verwendet.

Instanzmethoden

DisposableStack.prototype.adopt()

Registriert einen Wert, der das Disposable-Protokoll nicht implementiert, mithilfe einer benutzerdefinierten Disposer-Funktion beim Stapel.

DisposableStack.prototype.defer()

Nimmt eine Callback-Funktion entgegen, die bei der Freigabe des Stapels aufgerufen wird.

DisposableStack.prototype.dispose()

Gibt diesen Stapel frei, indem alle bei ihm registrierten Disposer-Funktionen in umgekehrter Reihenfolge ihrer Registrierung aufgerufen werden.

DisposableStack.prototype.move()

Erstellt eine neue DisposableStack-Instanz mit denselben Disposer-Funktionen wie dieser Stapel und markiert anschließend diesen Stapel als freigegeben, ohne Disposer-Funktionen aufzurufen.

DisposableStack.prototype.use()

Registriert einen Wert, der das Disposable-Protokoll implementiert, beim Stapel.

DisposableStack.prototype[Symbol.dispose]

Ein Alias für die Methode dispose().

Spezifikationen

Spezifikation
ECMAScript Async Explicit Resource Management
# sec-disposablestack-objects

Browser-Kompatibilität

Siehe auch