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 |
瀏覽器相容性
載入中…