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

瀏覽器相容性

另見