DisposableStack.prototype.defer()
DisposableStack
实例的 defer()
方法接受一个回调函数,该函数将在堆栈被处置时被调用。
语法
js
defer(onDispose)
参数
onDispose
-
一个在堆栈被处置时将被调用的函数。该函数不接收任何参数。
返回值
无(undefined
)。
异常
TypeError
-
如果
onDispose
不是函数,则抛出异常。 ReferenceError
-
如果堆栈已被处置,则抛出异常。
描述
defer()
的主要目的是注册一个清理回调,该回调不特定于某个资源的处置。如果回调特定于某个资源,您应该改用 use()
或 adopt()
。当资源不在您的代码中声明时,您也可以使用 defer
。
js
function consumeReader(reader) {
using disposer = new DisposableStack();
disposer.defer(() => reader.releaseLock());
// Do something with reader
}
示例
使用 defer()
此函数设置一个简单的锁,以防止多个异步操作同时运行。当函数完成时,锁将被释放。
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;
}
规范
规范 |
---|
ECMAScript 异步显式资源管理 # sec-asyncdisposablestack.prototype.defer |
浏览器兼容性
加载中…