Symbol.asyncDispose
Die statische Dateneigenschaft Symbol.asyncDispose
repräsentiert das wohlbekannte Symbol Symbol.asyncDispose
. Die await using
-Deklaration sucht dieses Symbol im Variablen-Initializer für die Methode, die aufgerufen werden soll, wenn die Variable außer Reichweite gerät.
Wert
Das wohlbekannte Symbol Symbol.asyncDispose
.
Eigenschaften von Symbol.asyncDispose | |
---|---|
Schreibbar | nein |
Aufzählbar | nein |
Konfigurierbar | nein |
Beschreibung
Ein Objekt ist asynchron disposable, wenn es die Methode [Symbol.asyncDispose]()
hat. Diese Methode sollte die folgenden Semantiken besitzen:
- Der Aufruf dieser Methode benachrichtigt das AsyncDisposable-Objekt, dass der Aufrufer nicht die Absicht hat, das Objekt weiter zu verwenden. Diese Methode sollte alle notwendigen Logiken ausführen, um die Ressource explizit zu bereinigen, einschließlich, aber nicht beschränkt auf Dateisystem-Handles, Streams, Host-Objekte etc.
- Diese Methode kann ein Promise zurückgeben, das vor dem Fortfahren abgewartet wird.
- Wenn eine Ausnahme von dieser Methode ausgelöst wird, bedeutet das typischerweise, dass die Ressource nicht explizit freigegeben werden konnte. Ein AsyncDisposable-Objekt wird nicht als "disposed" betrachtet, bis das resultierende Promise erfüllt worden ist.
- Wenn die Funktion mehr als einmal auf dasselbe Objekt aufgerufen wird, sollte keine Ausnahme ausgelöst werden. Diese Anforderung wird jedoch nicht erzwungen.
Beispiele
Benutzerdefinierte asynchrone Disposables
[Symbol.asyncDispose]
ermöglicht die Erstellung von benutzerdefinierten asynchronen Disposables. Siehe die Referenz zu await using
für weitere Informationen.
js
class Disposable {
#fileHandle;
#disposed;
constructor(handle) {
this.#disposed = false;
this.#fileHandle = handle;
}
async [Symbol.asyncDispose]() {
await this.#fileHandle.close();
this.disposed = true;
}
get isDisposed() {
return this.disposed;
}
}
const resource = new Disposable(await fs.open("my-file.txt", "r"));
{
await using resourceUsed = resource;
console.log(resource.isDisposed); // false
}
console.log(resource.isDisposed); // true
Spezifikationen
Specification |
---|
ECMAScript Async Explicit Resource Management # table-1 |