【JSリファレンス】AsyncGeneratorFunctionコンストラクター
更新日:2024/06/14
※AsyncGeneratorFunctionコンストラクターコンストラクターはGlobalオブジェクトで公開されていないため、直接呼び出すことができません。
AsyncGeneratorFunctionコンストラクターは、async function* 構文により呼び出されAsyncGeneratorFunctionオブジェクトを生成します。
生成されたAsyncGeneratorFunctionオブジェクトは関数です。
呼び出すことでAsyncGeneratorオブジェクトを取得できます。
■使用例
// 500ミリ秒待機するPromise
const sleep500 = (value)=> new Promise(
resolve =>setTimeout(
()=>resolve(
`500ミリ秒待機しました(${value})`
)
, 500 )
);
// async function*により、
// AsyncGeneratorFunctionオブジェクト生成
const func = async function* (a,b,c){
yield sleep500(a);
yield sleep500(b);
yield sleep500(c);
}
// AsyncGeneratorFunctionオブジェクトから
// AsyncGeneratorオブジェクトを生成
const asyncGenerator = func(1,2,3);
(async function(){
// Generatorオブジェクトから値を取り出す
for await ( const value of asyncGenerator ){
console.log( value );
}
})();
// 結果:
// 500ミリ秒待機しました(1)
// 500ミリ秒待機しました(2)
// 500ミリ秒待機しました(3)
■AsyncGeneratorFunctionコンストラクターの取得
基本的にはジェネレーター生成でAsyncGeneratorFunctionコンストラクターを呼び出す必要はありません。
そのため、Globalオブジェクトで公開されていません。
しかし次のような方法を用いることでAsyncGeneratorFunctionコンストラクターを取得し、非同期ジェネレーターを生成することが可能です。
// 500ミリ秒待機するPromise
const sleepFuncString = `
const sleep500 = (value)=> new Promise(
resolve =>setTimeout(
()=>resolve(
\`500ミリ秒待機しました(\${value})\`
)
, 500 )
);`;
// async function*により、
// AsyncGeneratorFunctionオブジェクト生成
const dumyFunc = async function* (){};
// AsyncGeneratorFunctionオブジェクトの
// プロトタイプからconstructorを取得
const asyncGeneratorFunction =
Object.getPrototypeOf(dumyFunc).constructor;
// GeneratorFunctionコンストラクターから
// GeneratorFunctionオブジェクト生成
const asyncGeneratorFunctionObj =
asyncGeneratorFunction("a","b","c",
sleepFuncString +
" yield sleep500(a);yield sleep500(b);yield sleep500(c)"
);
// AsyncGeneratorFunctionオブジェクトから
// AsyncGeneratorオブジェクトを生成
const asyncGenerator = asyncGeneratorFunctionObj(1,2,3);
(async function(){
// Generatorオブジェクトから値を取り出す
for await ( const value of asyncGenerator ){
console.log( value );
}
})();
AsyncGeneratorFunctionコンストラクターは、newキーワード使用の有無にかかわらずAsyncGeneratorFunctionオブジェクトを生成します。
引数はnew Function()と同じです。
■プロパティ
■prototypeプロパティ
■インスタンスプロパティ
■インスタンスメソッド
関連ページ
更新日:2024/06/14
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。