DisposableStack
Das DisposableStack
-Objekt repräsentiert einen Stapel von Disposern, die ausgeführt werden, wenn der Stapel selbst entsorgt wird. Disposer-Funktionen werden in umgekehrter Reihenfolge der Registrierung mit starken Fehlerbehandlungsgarantien ausgeführt. Wenn Sie die move()
-Methode aufrufen, wird die Verantwortung für das Aufrufen der derzeit registrierten Disposer an einen neuen DisposableStack
übertragen und die Registrierung weiterer Disposer verhindert.
Beschreibung
Ein DisposableStack
ist im Hinblick auf seine Schnittstelle nicht exakt ein "Stapel". Es gibt mehrere Methoden, um Disposer hinzuzufügen, aber es gibt keine Möglichkeit, einen einzelnen Disposer zu entfernen. Stattdessen werden alle Disposer entnommen und nacheinander ausgeführt, wenn der Stapel entsorgt wird.
Sie registrieren verfügbare Ressourcen beim DisposableStack
mit dessen Methoden use()
, adopt()
oder defer()
.
using disposer = new DisposableStack();
const reader = disposer.use(stream.getReader());
Wenn der Disposer
dann aus dem Gültigkeitsbereich fällt, werden alle bei ihm registrierten Ressourcen in umgekehrter Reihenfolge der Registrierung entsorgt, es sei denn, sie wurden mit move()
entfernt.
Es ist eine gute Praxis, den Ausdruck zur Ressourcenerfassung nicht in eine separate Anweisung auszulagern, egal wie lang der Ausdruck ist. Sie sollten den use()
- oder adopt()
-Aufruf immer um den Ressourcenerfassungsausdruck wickeln, um sicherzustellen, dass die Ressource sofort beim Stapel registriert wird.
using disposer = new DisposableStack();
const reader = stream.getReader();
disposer.use(reader);
Funktional sind diese beiden Code-Snippets gleichwertig. Das erste ist jedoch weniger fehleranfällig, da die Ressource in einer einzigen Zeile deklariert und registriert wird. Wenn jemand mehr Code zwischen die zweite und dritte Zeile des zweiten Snippets einfügt, könnte ein Fehler auftreten, der dazu führt, dass die Ressource austritt.
Konstruktor
DisposableStack()
-
Erzeugt 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 derDisposableStack
-Konstruktor. DisposableStack.prototype.disposed
-
Schreibgeschützt. Gibt
true
zurück, wenn dasDisposableStack
entsorgt wurde, oderfalse
, wenn nicht. DisposableStack.prototype[Symbol.toStringTag]
-
Der Anfangswert der
[Symbol.toStringTag]
-Eigenschaft ist der String"DisposableStack"
. Diese Eigenschaft wird inObject.prototype.toString()
verwendet.
Instanzmethoden
DisposableStack.prototype.adopt()
-
Registriert einen Wert, der das Disposable-Protokoll nicht implementiert, beim Stapel, indem eine benutzerdefinierte Disposer-Funktion bereitgestellt wird.
DisposableStack.prototype.defer()
-
Nimmt eine Callback-Funktion an, die aufgerufen wird, wenn der Stapel entsorgt wird.
DisposableStack.prototype.dispose()
-
Entsorgt diesen Stapel, indem alle bei ihm registrierten Disposer in umgekehrter Reihenfolge der Registrierung aufgerufen werden.
DisposableStack.prototype.move()
-
Erstellt eine neue
DisposableStack
-Instanz, die dieselben Disposer wie dieser Stapel enthält, und markiert dann diesen Stapel als entsorgt, ohne Disposer aufzurufen. DisposableStack.prototype.use()
-
Registriert einen Wert, der das Disposable-Protokoll beim Stapel implementiert.
DisposableStack.prototype[Symbol.dispose]
-
Ein Alias für die
dispose()
-Methode.
Spezifikationen
Specification |
---|
ECMAScript Async Explicit Resource Management # sec-disposablestack-objects |