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().
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.
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 KonstruktorDisposableStack. DisposableStack.prototype.disposed-
Schreibgeschützt. Gibt
truezurück, wenn derDisposableStackfreigegeben wurde, andernfallsfalse. DisposableStack.prototype[Symbol.toStringTag]-
Der Anfangswert der Eigenschaft
[Symbol.toStringTag]ist die Zeichenfolge"DisposableStack". Diese Eigenschaft wird inObject.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> |