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 |
浏览器兼容性
加载中…