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
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
SuppressedErrorerstellt, wobei der ursprüngliche Fehler in der Eigenschaftsuppressedund der neue Fehler in der Eigenschafterrorgespeichert 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.
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> |