Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Symbol.asyncDispose
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 statische Dateneigenschaft Symbol.asyncDispose repräsentiert das bekannte Symbol Symbol.asyncDispose. Die Deklaration await using sucht im Initialisierungswert der Variablen nach diesem Symbol, um die Methode zu bestimmen, die aufgerufen wird, wenn die Variable ihren Gültigkeitsbereich verlässt.
Wert
Das bekannte Symbol Symbol.asyncDispose.
Eigenschaften von Symbol.asyncDispose | |
|---|---|
| Schreibbar | nein |
| Aufzählbar | nein |
| Konfigurierbar | nein |
Beschreibung
Ein Objekt kann asynchron freigegeben werden, wenn es über die Methode [Symbol.asyncDispose]() verfügt. Für diese Methode wird folgendes Verhalten erwartet:
- Ein Aufruf dieser Methode teilt dem AsyncDisposable-Objekt mit, dass der Aufrufer das Objekt nicht weiter verwenden möchte. Die Methode sollte alle erforderlichen Schritte ausführen, um die Ressource ausdrücklich freizugeben. Dazu gehören beispielsweise Dateisystem-Handles, Streams und Host-Objekte.
- Die Methode kann ein Promise zurückgeben, dessen Erfüllung abgewartet wird, bevor die Ausführung fortgesetzt wird.
- Wenn diese Methode eine Ausnahme auslöst, bedeutet dies in der Regel, dass die Ressource nicht ausdrücklich freigegeben werden konnte. Ein AsyncDisposable-Objekt gilt erst dann als „freigegeben“, wenn das zurückgegebene Promise erfüllt wurde.
- Bei mehrmaligem Aufruf für dasselbe Objekt sollte die Funktion keine Ausnahme auslösen. Diese Anforderung wird jedoch nicht erzwungen.
Beispiele
>Benutzerdefinierte asynchron freigebbare Objekte
[Symbol.asyncDispose] ermöglicht es, benutzerdefinierte asynchron freigebbare Objekte zu erstellen. Weitere Informationen finden Sie in der Referenz zu await using.
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
| Spezifikation |
|---|
| ECMAScript Async Explicit Resource Management> # sec-well-known-symbols> |
