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

瀏覽器相容性

另見