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

【JavaScript ECMAScript】AsyncGeneratorFunction::AsyncGeneratorFunction() constructorコンストラクタの使い方

AsyncGeneratorFunction() constructorコンストラクタの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

AsyncGeneratorFunction() constructor関数は、新しい非同期ジェネレータ関数を動的に作成するための組み込みコンストラクタ関数です。この関数は、引数として関数の仮引数リストと関数本体を文字列として受け取り、それらを基に実行時に新しい非同期ジェネレータ関数オブジェクトを生成します。

これにより、プログラムの実行中にコードを文字列から生成し、関数として実行するといった、特定の高度なプログラミングシナリオで柔軟性を提供します。生成される非同期ジェネレータ関数は、通常のasync function*キーワードを用いて定義される非同期ジェネレータ関数と全く同じ機能を持っています。具体的には、この関数を呼び出すと非同期イテレータが返され、そのイテレータはnext()return()throw()といったメソッドを通じて値を順次、非同期的に生成したり、制御したりできます。また、生成された非同期ジェネレータ関数の本体内では、awaitキーワードを使って非同期処理の完了を待ち、同時にyieldキーワードを使って値を段階的に返すことが可能です。

しかし、このコンストラクタは文字列として渡されたコードを評価・実行するため、セキュリティ上の潜在的なリスクや、通常の関数定義に比べてパフォーマンス上のオーバーヘッドが発生する可能性があります。そのため、特別な理由がない限り、非同期ジェネレータ関数を定義する際は、安全で効率的なasync function* functionName(args) { /* body */ }の構文を使用することが強く推奨されます。

公式リファレンス: AsyncGeneratorFunction() constructor

構文(syntax)

1const AsyncGeneratorFunction = Object.getPrototypeOf(async function* () {}).constructor;
2const dynamicAsyncGenerator = new AsyncGeneratorFunction(
3  'arg1',
4  'arg2',
5  'console.log(`Arguments: ${arg1}, ${arg2}`); yield Promise.resolve(arg1 + arg2);'
6);

引数(parameters)

arg1, arg2, ..., body

  • arg1, arg2, ...: async ジェネレーター関数の本体で使用される引数名を文字列として指定します。
  • body: async ジェネレーター関数の本体となるコードブロックを文字列として指定します。

戻り値(return)

戻り値なし

戻り値はありません

関連コンテンツ