Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【JavaScript ECMAScript】AsyncIterator::AsyncIterator.prototype[Symbol.asyncDispose]インスタンスメソッドの使い方

AsyncIterator.prototype[Symbol.asyncDispose]()インスタンスメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

AsyncIterator.prototypeSymbol.asyncDisposeメソッドは、非同期イテレーターが利用するリソースの非同期的なクリーンアップ処理を実行するメソッドです。

このメソッドは、JavaScriptにおける「明示的なリソース管理」という新しい仕組みの一部として導入されました。データベース接続、開かれたファイル、ネットワークソケットなど、プログラムが外部から取得し、使用後に必ず閉じたり解放したりする必要がある資源(リソース)を、安全かつ確実に処理するために設計されています。

主に、for await...ofループを使用して非同期イテレーターから要素を取り出す際や、今後導入されるawait using宣言といった構文と組み合わせて使用されます。これらの構文は、イテレーターの処理が完了したり、リソースが不要になったりしたときに、この[Symbol.asyncDispose]()メソッドを自動的に呼び出します。これにより、プログラマーが手動でリソース解放のコードを書く手間を省き、リソースの解放忘れによるメモリリークやシステムリソースの枯渇といった問題を未然に防ぎ、プログラムの安定性を高めます。

このメソッドはPromiseを返すため、非同期で行われるリソースの解放処理が完了するまで待機することが可能です。Symbol.asyncDisposeという特殊なシンボルをキーとして使用することで、JavaScriptエンジンがこのメソッドを特別なクリーンアップ処理として認識し、適切なタイミングで呼び出す仕組みとなっています。

構文(syntax)

1// オブジェクトに Symbol.asyncDispose メソッドを定義する構文
2const myAsyncDisposable = {
3  async [Symbol.asyncDispose]() {
4    // 非同期リソースの解放処理をここに記述します。
5    // このメソッドは引数を取らず、Promise を返します。
6    console.log("Async resource is being disposed.");
7    await new Promise(resolve => setTimeout(resolve, 50)); // 非同期処理のシミュレーション
8  }
9};
10
11// AsyncIterator.prototype[Symbol.asyncDispose]() メソッドの呼び出し構文
12(async () => {
13  await myAsyncDisposable[Symbol.asyncDispose]();
14})();

引数(parameters)

引数なし

引数はありません

戻り値(return)

Promise<void>

AsyncIterator.prototypeSymbol.asyncDispose は、非同期イテレータのクリーンアップ処理を実行するためのメソッドです。このメソッドは、完了時に何も値を返さない Promise を返します。

関連コンテンツ