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

View in English Always switch to English

AsyncDisposableStack.prototype.disposeAsync()

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 disposeAsync() von AsyncDisposableStack-Instanzen gibt diesen Stack frei, indem sie alle darin registrierten Disposer in umgekehrter Reihenfolge ihrer Registrierung aufruft. Sie wartet jeweils auf den Abschluss eines Disposers, bevor sie den nächsten aufruft. Wenn der Stack bereits freigegeben wurde, bewirkt diese Methode nichts.

Sie führt dieselbe Aktion aus wie await using disposer = new AsyncDisposableStack() beim Verlassen des Gültigkeitsbereichs. Sie können sie verwenden, wenn die Bereinigung zu einem anderen Zeitpunkt erfolgen soll.

Syntax

js
disposeAsync()

Parameter

Keine.

Rückgabewert

Ein neues Promise, das mit undefined erfüllt wird, sobald alle registrierten Disposer nacheinander abgeschlossen wurden.

Ausnahmen

disposeAsync() löst niemals synchron einen Fehler aus. Das zurückgegebene Promise kann mit einem der folgenden Fehler zurückgewiesen werden:

SuppressedError

Wird ausgelöst, wenn mehrere Disposer im Stack einen Fehler ausgelöst haben. Wenn nur ein Fehler ausgelöst wird, wird er unverändert weitergegeben. Andernfalls wird für jeden weiteren Fehler ein neuer SuppressedError erstellt, dessen suppressed-Eigenschaft den ursprünglichen Fehler und dessen error-Eigenschaft den neuen Fehler enthält.

Beispiele

Einen Stack freigeben

Hier fügen wir dem Stack mit den Methoden use(), adopt() und defer() drei Disposer hinzu. Beim Aufruf von disposeAsync() werden die Disposer in umgekehrter Reihenfolge ihrer Registrierung aufgerufen.

Normalerweise müssen Sie disposeAsync() nicht manuell aufrufen. Deklarieren Sie den Stack mit await using; seine Methode [Symbol.asyncDispose]() wird dann automatisch aufgerufen, wenn der Stack den Gültigkeitsbereich verlässt.

js
class Resource {
  #doDisposal() {
    // Imagine more meaningful disposal logic here
    return new Promise((resolve) => {
      setTimeout(resolve, 1000);
    });
  }
  async dispose() {
    await this.#doDisposal();
    console.log("Resource disposed");
  }
  async [Symbol.asyncDispose]() {
    await this.#doDisposal();
    console.log("Resource disposed via Symbol.asyncDispose");
  }
}

async function doSomething() {
  const disposer = new AsyncDisposableStack();
  const resource = disposer.use(new Resource());
  const resource2 = disposer.adopt(new Resource(), (resource) =>
    resource.dispose(),
  );
  disposer.defer(() => console.log("Deferred disposer"));
  disposer.disposeAsync();
  // Logs in order:
  // Deferred disposer
  // Resource disposed
  // Resource disposed via Symbol.dispose
}

doSomething();

Spezifikationen

Spezifikation
ECMAScript Async Explicit Resource Management
# sec-asyncdisposablestack.prototype.disposeAsync

Browser-Kompatibilität

Siehe auch