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 |
瀏覽器相容性
載入中…