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

View in English Always switch to English

DisposableStack.prototype.defer()

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 defer() von DisposableStack-Instanzen nimmt eine Callback-Funktion entgegen, die aufgerufen wird, wenn der Stack freigegeben wird.

Syntax

js
defer(onDispose)

Parameter

onDispose

Eine Funktion, die aufgerufen wird, wenn der Stack freigegeben wird. Die Funktion erhält keine Argumente.

Rückgabewert

Keiner (undefined).

Ausnahmen

TypeError

Wird ausgelöst, wenn onDispose keine Funktion ist.

ReferenceError

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

Beschreibung

Der Hauptzweck von defer() besteht darin, einen Callback zur Bereinigung zu registrieren, der nicht an die Freigabe einer bestimmten Ressource gebunden ist. Wenn sich der Callback auf eine bestimmte Ressource bezieht, sollten Sie stattdessen use() oder adopt() verwenden. Sie können defer auch verwenden, wenn die Ressource nicht in Ihrem Code verwaltet wird:

js
function consumeReader(reader) {
  using disposer = new DisposableStack();
  disposer.defer(() => reader.releaseLock());
  // Do something with reader
}

Beispiele

defer() verwenden

Diese Funktion setzt eine einfache Sperre, damit nicht mehrere asynchrone Operationen gleichzeitig ausgeführt werden. Die Sperre wird aufgehoben, wenn die Funktion abgeschlossen ist.

js
let isLocked = false;

async function requestWithLock(url, options) {
  if (isLocked) {
    return undefined;
  }
  using disposer = new DisposableStack();
  isLocked = true;
  disposer.defer(() => (isLocked = false));
  const data = await fetch(url, options).then((res) => res.json());
  return data;
}

Spezifikationen

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

Browser-Kompatibilität

Siehe auch