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

浏览器兼容性

另见