DisposableStack.prototype.dispose()

可用性有限

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

dispose() 方法是 DisposableStack 实例的一个方法,它通过按注册的相反顺序调用所有已注册的析构器来析构此堆栈。如果堆栈已被析构,则此方法不执行任何操作。

它执行的操作与作用域退出时的 using disposer = new DisposableStack() 相同。如果需要在作用域退出之外的其他时间点进行清理,则可以使用此方法。

语法

js
dispose()

参数

无。

返回值

无(undefined)。

异常

SuppressedError

如果堆栈中的多个析构器抛出错误,则会抛出此错误。如果只抛出一个错误,则会按原样重新抛出。否则,对于每个额外的错误,会创建一个新的 SuppressedError,其中原始错误作为 suppressed 属性,新错误作为 error 属性。

示例

析构堆栈

在此示例中,我们使用 use()adopt()defer() 方法向堆栈推送了三个析构器。调用 dispose() 时,将按注册的相反顺序调用析构器。

请注意,通常不需要手动调用 dispose()。使用 using 声明堆栈,当堆栈超出作用域时,其 [Symbol.dispose]() 方法将自动被调用。

js
class Resource {
  dispose() {
    console.log("Resource disposed");
  }
  [Symbol.dispose]() {
    console.log("Resource disposed via Symbol.dispose");
  }
}

{
  const disposer = new DisposableStack();
  const resource = disposer.use(new Resource());
  const resource2 = disposer.adopt(new Resource(), (resource) =>
    resource.dispose(),
  );
  disposer.defer(() => console.log("Deferred disposer"));
  disposer.dispose();
  // Logs in order:
  // Deferred disposer
  // Resource disposed
  // Resource disposed via Symbol.dispose
}

规范

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

浏览器兼容性

另见