AsyncDisposableStack.prototype.adopt()

可用性有限

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

adopt() 方法是 AsyncDisposableStack 例項的方法,它透過提供自定義的處置函式,將未實現非同步處置協議的值註冊到堆疊中。

有關 adopt() 方法的常規資訊,請參閱 DisposableStack.prototype.adopt()

語法

js
adopt(value, onDispose)

引數

value

要註冊到堆疊的任何值。

onDispose

在處置堆疊時將被呼叫的函式。該函式接收 value 作為其唯一引數,並且可以返回一個會被等待的 promise。

返回值

傳入的 value 相同。

異常

TypeError

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

ReferenceError

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

示例

使用 adopt()

此函式建立一個檔案控制代碼(作為 Node.js 的 FileHandle),該控制代碼在函式完成時關閉。我們假設檔案控制代碼未實現非同步處置協議(實際上它實現了),因此我們使用 adopt() 將其註冊到堆疊。由於 handle.close() 方法返回一個 promise,我們需要使用 AsyncDisposableStack 以便等待處置完成。

js
async function readFile(path) {
  await using disposer = new AsyncDisposableStack();
  const handle = disposer.adopt(
    fs.open(path),
    async (handle) => await handle.close(),
  );
  const data = await handle.read();
  // The handle.close() method is called and awaited here before exiting
  return data;
}

規範

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

瀏覽器相容性

另見