Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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 wohlbekannte Symbol Symbol.asyncDispose. Die Deklaration await using sucht dieses Symbol im Initialisierungswert der Variablen, um die Methode zu ermitteln, die aufgerufen wird, wenn die Variable ihren Gültigkeitsbereich verlässt.

Wert

Das wohlbekannte Symbol Symbol.asyncDispose.

Eigenschaften von Symbol.asyncDispose
Schreibbarnein
Aufzählbarnein
Konfigurierbarnein

Beschreibung

Ein Objekt kann asynchron freigegeben werden, wenn es über die Methode [Symbol.asyncDispose]() verfügt. Von dieser 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 explizit freizugeben. Dazu gehören unter anderem 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 das in der Regel, dass die Ressource nicht explizit freigegeben werden konnte. Ein AsyncDisposable-Objekt gilt erst dann als „freigegeben“, wenn das resultierende Promise erfüllt wurde.
  • Wird die Methode für dasselbe Objekt mehr als einmal aufgerufen, sollte sie keine Ausnahme auslösen. Diese Anforderung wird jedoch nicht erzwungen.

Beispiele

Benutzerdefinierte asynchron freigebbare Objekte

[Symbol.asyncDispose] ermöglicht die Erstellung benutzerdefinierter asynchron freigebbarer Objekte. Weitere Informationen finden Sie in der Referenz zu await using.

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

Spezifikation
ECMAScript Async Explicit Resource Management
# sec-well-known-symbols

Browser-Kompatibilität

Siehe auch