このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Symbol.asyncDispose

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Symbol.asyncDispose は静的データプロパティであり、ウェルノウンシンボルSymbol.asyncDispose を表します。 await using 宣言は、変数の初期化子において、変数がスコープ外になった際に呼び出すメソッドとしてこのシンボルを検索します。

ウェルノウンシンボル Symbol.asyncDispose です。

Symbol.asyncDispose のプロパティ属性
書込可能不可
列挙可能不可
設定可能不可

解説

非同期に処分可能な (async disposable) オブジェクトとは、 [Symbol.asyncDispose]() メソッドを備えたオブジェクトです。このメソッドは、以下のようなセマンティクスを持つことが期待されます。

  • このメソッドを呼び出すことで、呼び出し元がこのオブジェクトの使用を継続する意図がないことを、非同期に処分可能なオブジェクトに伝えます。このメソッドは、ファイルシステムハンドル、ストリーム、ホストオブジェクトなど、リソースを明示的にクリーンアップするために必要なロジックを実行する必要があります。
  • このメソッドはプロミスを返すことがあり、そのプロミスを待ってから処理を続行します。
  • このメソッドで例外が発生した場合、通常はリソースを解放できなかったことを意味します。非同期に処分可能なオブジェクトは、返される Promise が履行されるまで「処分された」とはみなされません。
  • 同じオブジェクトにおいて 2 回以上呼び出された場合に、メソッドは例外を発生させるべきではありません。ただし、この要件は強制ではありません。

ユーザー定義の非同期に処分可能なオブジェクト

[Symbol.dispose] により、独自の非同期に処分可能なオブジェクトが作成できます。詳細については、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

仕様書

Specification
ECMAScript Async Explicit Resource Management
# table-1

ブラウザーの互換性

関連情報