Symbol.asyncDispose

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

Symbol.asyncDispose 靜態資料屬性表示 知名符號 Symbol.asyncDisposeawait using 宣告在變數離開作用域時,會查詢變數初始化器上的此符號以呼叫相應的方法。

知名符號 Symbol.asyncDispose

Symbol.asyncDispose 的屬性特性
可寫
可列舉
可配置

描述

如果一個物件具有 [Symbol.asyncDispose]() 方法,那麼它就是非同步可處置的。該方法應具有以下語義:

  • 呼叫此方法會通知 AsyncDisposable 物件,呼叫者不再打算繼續使用該物件。此方法應執行任何必要的邏輯來顯式清理資源,包括但不限於檔案系統控制代碼、流、宿主物件等。
  • 此方法可以返回一個 Promise,在繼續之前將對其進行等待。
  • 當此方法丟擲異常時,通常意味著資源未能被顯式釋放。一個 AsyncDisposable 物件在返回的 Promise 已 fulfilled 之前,不會被認為是“已處置”的。
  • 如果在同一個物件上多次呼叫,該函式不應丟擲異常。但是,此要求並未強制執行。

示例

使用者定義的非同步可處置物件

[Symbol.asyncDispose] 允許建立自定義的非同步可處置物件。有關更多資訊,請參閱 await using 參考。

js
class Disposable {
  #fileHandle;
  #disposed;

  constructor(handle) {
    this.#disposed = false;
    this.#fileHandle = handle;
  }

  async [Symbol.asyncDispose]() {
    await this.#fileHandle.close();
    this.disposed = true;
  }

  get isDisposed() {
    return this.disposed;
  }
}

const resource = new Disposable(await fs.open("my-file.txt", "r"));
{
  await using resourceUsed = resource;
  console.log(resource.isDisposed); // false
}
console.log(resource.isDisposed); // true

規範

規範
ECMAScript 非同步顯式資源管理
# table-1

瀏覽器相容性

另見