AsyncDisposableStack.prototype.defer()

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

AsyncDisposableStack 例項的 defer() 方法接受一個回撥函式,該函式將在堆疊被釋放時被呼叫並等待。

有關 defer() 方法的一般資訊,請參閱 DisposableStack.prototype.defer()

語法

js
defer(onDispose)

引數

onDispose

一個將在堆疊被釋放時呼叫的函式。該函式不接收任何引數,並且可以返回一個會被等待的 Promise。

返回值

無(undefined)。

異常

TypeError

如果 onDispose 不是函式,則丟擲異常。

ReferenceError

如果堆疊已被處置,則丟擲異常。

示例

使用 defer()

defer() 的一個用例是在作用域退出時執行與資源釋放無關的操作,例如記錄一條訊息。

js
async function doSomething() {
  await using disposer = new AsyncDisposableStack();
  disposer.defer(async () => {
    await fs.writeFile("log.txt", "All resources freed successfully");
  });
  // Other code that claims and frees more data
}

規範

規範
ECMAScript 非同步顯式資源管理
# sec-asyncdisposablestack.prototype.defer

瀏覽器相容性

另見