Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

DisposableStack : méthode defer()

Limited availability

Cette fonctionnalité n'est pas Compatible car elle ne fonctionne pas dans certains des navigateurs les plus utilisés.

La méthode defer() des instances de DisposableStack prend une fonction de rappel à appeler lors de la libération de la pile.

Syntaxe

js
defer(onDispose)

Paramètres

onDispose

Une fonction qui sera appelée lors de la libération de la pile. La fonction ne reçoit aucun argument.

Valeur de retour

Aucune (undefined).

Exceptions

TypeError

Levée si onDispose n'est pas une fonction.

ReferenceError

Levée si la pile est déjà libérée.

Description

L'objectif principal de defer() est d'enregistrer une fonction de rappel de nettoyage qui n'est pas spécifique à la libération d'une ressource particulière. Si la fonction de rappel concerne une ressource, vous devez utiliser use() ou adopt() à la place. Vous pouvez aussi utiliser defer lorsque la ressource n'est pas gérée dans votre code :

js
function consumeReader(reader) {
  using disposer = new DisposableStack();
  disposer.defer(() => reader.releaseLock());
  // Effectuer une opération avec reader
}

Exemples

Utiliser la méthode defer()

Cette fonction place un verrou simple pour empêcher plusieurs opérations asynchrones de s'exécuter en même temps. Le verrou est libéré lorsque la fonction se termine.

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;
}

Spécifications

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

Compatibilité des navigateurs

Voir aussi