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 |
浏览器兼容性
加载中…