Symbol.asyncDispose - JavaScript | MDN

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

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.

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