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 |
浏览器兼容性
加载中…