DisposableStack.prototype.use()

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

DisposableStack 实例的 use() 方法将实现 可处置协议 的值注册到堆栈。

语法

js
use(value)

参数

value

要注册到堆栈的值。必须包含一个 [Symbol.dispose]() 方法,或者为 nullundefined

返回值

传入的 value 相同。

异常

TypeError

如果 value 不是 nullundefined,并且不包含 [Symbol.dispose]() 方法,则抛出此错误。

ReferenceError

如果堆栈已被处置,则抛出异常。

描述

use() 的主要目的是将实现可处置协议的值注册到堆栈,这等同于 using 声明。如果该值未实现可处置协议(没有 [Symbol.dispose]() 方法),则应改用 adopt(),并传递一个调用资源清理方法的函数。

您应该在声明资源后立即注册它。这意味着您应该始终将资源获取表达式包装在 use() 中,而不是将其提取到单独的语句中。

js
using disposer = new DisposableStack();
const reader = stream.getReader();
disposer.use(reader);

示例

使用 use()

此代码通过 ReadableStreamDefaultReader 消耗 ReadableStream。当函数完成时,读取器会自动关闭,假设它实现了一个 [Symbol.dispose]() 方法,该方法同步释放对流的锁定。

js
{
  using disposer = new DisposableStack();
  const reader = disposer.use(stream.getReader());
  const { value, done } = reader.read();
  if (!done) {
    // Process the value
  }
  // The reader.releaseLock() method is called here before exiting
}

规范

规范
ECMAScript 异步显式资源管理
# sec-disposablestack.prototype.use

浏览器兼容性

另见