AsyncGeneratorFunction
Baseline
広く利用可能
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2020年1月以降、すべてのブラウザーで利用可能です。
AsyncGeneratorFunction オブジェクトは、非同期ジェネレーター関数のメソッドを提供します。 JavaScript では、すべての非同期ジェネレータ関数は実際には AsyncGeneratorFunction オブジェクトです。
なお、AsyncGeneratorFunction はグローバルオブジェクトではありません。以下のコードで取得できます。
const AsyncGeneratorFunction = async function* () {}.constructor;
AsyncGeneratorFunction は Function のサブクラスです。
試してみましょう
const AsyncGeneratorFunction = async function* () {}.constructor;
const foo = new AsyncGeneratorFunction(`
yield await Promise.resolve('a');
yield await Promise.resolve('b');
yield await Promise.resolve('c');
`);
let str = "";
async function generate() {
for await (const val of foo()) {
str += val;
}
console.log(str);
}
generate();
// 予想される結果: "abc"
コンストラクター
AsyncGeneratorFunction()-
新しい
AsyncGeneratorFunctionオブジェクトを生成します。
インスタンスプロパティ
親である Function から継承したインスタンスプロパティもあります。
これらのプロパティは AsyncGeneratorFunction.prototype で定義されており、すべての AsyncGeneratorFunction インスタンスで共有されます。
AsyncGeneratorFunction.prototype.constructor-
このインスタンスオブジェクトを生成したコンストラクター関数です。
AsyncGeneratorFunctionインスタンスにおいては、初期値はAsyncGeneratorFunctionコンストラクターです。 AsyncGeneratorFunction.prototype.prototype-
すべての非同期ジェネレータ関数は同じ
prototypeプロパティを共有していて、それはAsyncGenerator.prototypeです。async function*構文またはAsyncGeneratorFunction()コンストラクターで生成されるそれぞれの非同期ジェネレーター関数も、自身のprototypeプロパティを保持します。このプロパティのプロトタイプはAsyncGeneratorFunction.prototype.prototypeです。非同期ジェネレーター関数が呼び出されると、そのprototypeプロパティは返される非同期ジェネレーターオブジェクトのプロトタイプとなります。 AsyncGeneratorFunction.prototype[Symbol.toStringTag]-
[Symbol.toStringTag]プロパティの初期値は文字列"AsyncGeneratorFunction"です。このプロパティはObject.prototype.toString()で使用します。
以下のプロパティは、それぞれの AsyncGeneratorFunction インスタンスが自身で持つプロパティです。
インスタンスメソッド
親である Function からインスタンスメソッドを継承しています。
仕様書
| 仕様書 |
|---|
| ECMAScript® 2027 Language Specification> # sec-asyncgeneratorfunction-objects> |