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.adopt()

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 adopt() von AsyncDisposableStack-Instanzen registriert einen Wert, der das asynchrone Disposable-Protokoll nicht implementiert, mithilfe einer benutzerdefinierten Funktion zur Freigabe im Stack.

Allgemeine Informationen zur Methode adopt() finden Sie unter DisposableStack.prototype.adopt().

Syntax

js
adopt(value, onDispose)

Parameter

value

Ein beliebiger Wert, der im Stack registriert werden soll.

onDispose

Eine Funktion, die aufgerufen wird, wenn der Stack freigegeben wird. Sie erhält value als einziges Argument und kann ein Promise zurückgeben, dessen Erfüllung abgewartet wird.

Rückgabewert

Derselbe value, der übergeben wurde.

Ausnahmen

TypeError

Wird ausgelöst, wenn onDispose keine Funktion ist.

ReferenceError

Wird ausgelöst, wenn der Stack bereits freigegeben wurde.

Beispiele

adopt() verwenden

Diese Funktion erstellt ein Datei-Handle (ein Node.js-FileHandle), das geschlossen wird, wenn die Funktion abgeschlossen ist. Wir nehmen an, dass das Datei-Handle das asynchrone Disposable-Protokoll nicht implementiert (tatsächlich tut es das). Deshalb verwenden wir adopt(), um es im Stack zu registrieren. Da die Methode handle.close() ein Promise zurückgibt, müssen wir einen AsyncDisposableStack verwenden, damit die Freigabe abgewartet wird.

js
async function readFile(path) {
  await using disposer = new AsyncDisposableStack();
  const handle = disposer.adopt(
    await fs.open(path),
    async (handle) => await handle.close(),
  );
  const data = await handle.read();
  // The handle.close() method is called and awaited here before exiting
  return data;
}

Spezifikationen

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

Browser-Kompatibilität

Siehe auch