DisposableStack.prototype.defer()
The defer()
method of DisposableStack
instances takes a callback function to be called when the stack is disposed.
Syntax
js
defer(onDispose)
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 |