Symbol.asyncDispose
Symbol.asyncDispose 靜態資料屬性表示 知名符號 Symbol.asyncDispose。 await 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 |
瀏覽器相容性
載入中…