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().

js
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.

js
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 der DisposableStack-Konstruktor.

DisposableStack.prototype.disposed

Schreibgeschützt. Gibt true zurück, wenn das DisposableStack entsorgt wurde, oder false, wenn nicht.

DisposableStack.prototype[Symbol.toStringTag]

Der Anfangswert der [Symbol.toStringTag]-Eigenschaft ist der String "DisposableStack". Diese Eigenschaft wird in Object.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

Browser-Kompatibilität

Siehe auch