DisposableStack.prototype.defer() - JavaScript | MDN

Syntax

Parameters

onDispose

A function that will be called when the stack is disposed. The function receives no arguments.

Return value

None (undefined).

Exceptions

TypeError

Thrown if onDispose is not a function.

ReferenceError

Thrown if the stack is already disposed.

Description

The primary purpose of defer() is to register a cleanup callback that's not specific to the disposal of a particular resource. If the callback is specific to a resource, you should use use() or adopt() instead. You can also use defer when the resource is not claimed within your code:

js

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

Examples

Using defer()

This function sets a simple lock to prevent multiple async operations from running at the same time. The lock is released when the function completes.

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

Specifications

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

Browser compatibility

See also

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.