Explicit resource management
Explicit Resource Management(using 宣言)はスコープ終了時に自動的にリソースを解放する仕組みです。Symbol.dispose / Symbol.asyncDispose を実装したオブジェクトが対象です。
概要
Explicit Resource Management(using 宣言)はスコープ終了時に自動的にリソースを解放する仕組みです。Symbol.dispose / Symbol.asyncDispose を実装したオブジェクトが対象です。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 134 | 134 | 141 | | 134 | | |
AsyncDisposableStack.@@asyncDispose | 134 | 134 | 141 | | 134 | |
| AsyncDisposableStack() コンストラクタは、AsyncDisposableStack オブジェクトを生成します。 | 134 | 134 | 141 | | 134 | |
| AsyncDisposableStack インスタンスの adopt() メソッドは、カスタムディスポーザ関数を提供することで、非同期ディスポーザブルプロトコルを実装していない値をスタックに登録します。 | 134 | 134 | 141 | | 134 | |
| AsyncDisposableStackインスタンスのdefer()メソッドは、スタックが廃棄されるときに呼び出され待機するコールバック関数を取る。 | 134 | 134 | 141 | | 134 | |
| AsyncDisposableStack インスタンスの disposeAsync() メソッドは、このスタックに登録されているすべてのディスポーザを登録の逆順で呼び出し、それぞれのディスポーザの完了を待ってから次のディスポーザを呼び出します。スタックがすでに破棄されている場合、このメソッドは何もしません。 | 134 | 134 | 141 | | 134 | |
| AsyncDisposableStack インスタンスの disposed アクセサ・プロパティは、この AsyncDisposableStack がディスポされたかどうか、または以下のいずれかによって移動されたかどうかを示すブール値を返します: | 134 | 134 | 141 | | 134 | |
| AsyncDisposableStack インスタンスの move() メソッドは、このスタックと同じディスポーザを含む新しい AsyncDisposableStack インスタンスを作成し、ディスポーザを呼び出すことなく、このスタックを廃棄済みとしてマークします。 | 134 | 134 | 141 | | 134 | |
| AsyncDisposableStack インスタンスの use() メソッドは、非同期使い捨てプロトコルを実装する値をスタックに登録する。 | 134 | 134 | 141 | | 134 | |
AsyncIterator.@@asyncDispose | 134 | 134 | 141 | | 134 | |
| その他 | ||||||
| DisposableStack オブジェクトは、ディスポーザーのスタックを表します。スタックに登録したディスポーザーは、スタック自体が破棄される時に実行されます。ディスポーザーの関数は、強力なエラーハンドリングによる保証の元、登録した順番とは逆の順番で実行されます。ディスポーザーの move() メソッドを呼び出すと、現在登録しているディスポーザーを新しい DisposableStack に呼び出す責任を移譲し、追加のディスポーザーの登録を防止します。 | 134 | 134 | 141 | | 134 | |
| ビルトインオブジェクト | ||||||
DisposableStack.@@dispose | 134 | 134 | 141 | | 134 | |
| DisposableStack()コンストラクタは、DisposableStackオブジェクトを生成する。 | 134 | 134 | 141 | | 134 | |
| DisposableStack インスタンスの adopt() メソッドは、カスタムディスポーザ関数を提供することで、使い捨てプロトコルを実装していない値をスタックに登録します。 | 134 | 134 | 141 | | 134 | |
| DisposableStack インスタンスの defer() メソッドは、スタックが廃棄されるときに呼び出されるコールバック関数を受け取ります。 | 134 | 134 | 141 | | 134 | |
| DisposableStack インスタンスの dispose() メソッドは、このスタックに登録されているすべてのディスポーザを登録の逆順で呼び出すことで、このスタックを破棄します。スタックがすでに廃棄されている場合、このメソッドは何もしません。 | 134 | 134 | 141 | | 134 | |
| DisposableStackインスタンスのdisposedアクセサプロパティは、このDisposableStackが以下のいずれかを行うことで廃棄または移動されたかどうかを示すブール値を返します: | 134 | 134 | 141 | | 134 | |
| DisposableStack インスタンスの move() メソッドは、このスタックと同じディスポーザを含む新しい DisposableStack インスタンスを作成し、ディスポーザを呼び出すことなく、このスタックを廃棄済みとしてマークします。 | 134 | 134 | 141 | | 134 | |
| DisposableStack インスタンスの use() メソッドは、使い捨てプロトコルを実装した値をスタックに登録する。 | 134 | 134 | 141 | | 134 | |
Iterator.@@dispose | 134 | 134 | 141 | | 134 | |
| その他 | ||||||
| SuppressedError は、別のエラーを処理している際に発生したエラーを表すオブジェクトです。これは、Statements/using または Statements/await_using を使用したリソースの破棄中に生成されます。 | 134 | 134 | 141 | | 134 | |
| ビルトインオブジェクト | ||||||
| SuppressedError() コンストラクタは、SuppressedError オブジェクトを作成します。 | 134 | 134 | 141 | | 134 | |
| SuppressedError インスタンスの error data プロパティには、抑制の原因となったエラーへの参照が含まれます。 | 134 | 134 | 141 | | 134 | |
| SuppressedErrorインスタンスのsuppressed dataプロパティには、エラー処理中に新しいエラーが発生したために抑制された元のエラーへの参照が含まれる。 | 134 | 134 | 141 | | 134 | |
| Symbol.asyncDispose は静的データプロパティであり、ウェルノウンシンボルの Symbol.asyncDispose を表します。 Statements/await_using 宣言は、変数の初期化子において、変数がスコープ外になった際に呼び出すメソッドとしてこのシンボルを検索します。 | 127 | 127 | 141 | | 127 | |
| Symbol.dispose は静的データプロパティであり、ウェルノウンシンボルの Symbol.dispose を表します。Statements/using 宣言は、変数の初期化子において、変数がスコープ外になった際に呼び出すメソッドとしてこのシンボルを検索します。 | 125 | 125 | 141 | | 125 | |
| その他 | ||||||
| await using 宣言は、非同期的に破棄されるブロックスコープのローカル変数を宣言します。 Statements/const と同様に、 await using で宣言された変数は初期化が必要であり、再代入できません。変数の値は null、undefined、または [[Symbol.asyncDispose]()](/ja/docs/Web/JavaScript/Reference/GlobalObjects/Symbol/asyncDispose) か [[Symbol.dispose]()](/ja/docs/Web/JavaScript/Reference/GlobalObjects/Symbol/dispose)… | 134 | 134 | 141 | | 134 | |
| using 宣言は、同期的に破棄されるブロックスコープのローカル変数を宣言します。 Statements/const と同様に、 using で宣言された変数は初期化が必要であり、再代入できません。変数の値は null、undefined、または [[Symbol.dispose]()](/ja/docs/Web/JavaScript/Reference/Global_Objects/Symbol/dispose) メソッドを持つオブジェクトのいずれかでなければなりません。変数がスコープ外になると、リソースを解放するために、オブジェクトの [Symbol.dispose]() メソッドが呼び出されます。 | 134 | 134 | 141 | | 134 | |
基本構文
// Automatically release resources using the `using` statement
{
using file = openFile('data.txt');
// Use file
} // `file[Symbol.dispose]()` is automatically called when the scope ends
// Asynchronous version
await using db = connectDB(); 実務での使いどころ
-
Explicit resource management の活用
using 宣言によるリソースの自動クリーンアップ。ファイルハンドルやDB接続の安全な解放に使用。
注意点
- 一部のブラウザでのみ対応。使用前にブラウザサポートを確認すること。
アクセシビリティ
- JavaScript による動的更新時は、aria-live リージョンで変更をスクリーンリーダーに通知する。
参考リンク
Powered by web-features