この記事は編集レビューを必要としています。ぜひご協力ください。
Async
Function
コンストラクターは、新しい async function
オブジェクトを生成します。JavaScript では、すべての async function が実際には AsyncFunction
オブジェクトです。
AsyncFunction
はグローバルオブジェクトではないことに注意してください。AsyncFunction は、次のコードの結果として取得できます。
Object.getPrototypeOf(async function(){}).constructor
構文
new AsyncFunction ([arg1[, arg2[, ...argN]],] functionBody)
引数
arg1, arg2, ... argN
- 形式的な引数名として関数に使用される名前。それぞれが有効な JavaScript の識別子、またはカンマで区切られた文字列のリストに対応している必要がある; たとえば、"
x
" や "theValue
"、"a,b
"。 functionBody
- 関数定義を構成する JavaScript ステートメントを含む文字列。
説明
AsyncFunction
コンストラクターで生成された async function
オブジェクトは、関数が生成されたときにパースされます。これは、async function を async function expression
で定義してからコード内で呼び出す方法ほど有効ではありません。 なぜななら、そのような関数はコードの残りの部分と共にパースされるからです。
関数に渡されたすべての引数は、作成される関数内の引数の識別子名として渡されます。
ノート: AsyncFunction
コンストラクターで生成された async function
は、生成コンテキストにクロージャーを作成しません; それらは常にグローバルスコープに生成されます。それらを実行したとき、自身のローカル変数とグローバル変数にのみアクセスでき、AsyncFunction
コンストラクターが呼び出されたスコープの変数にはアクセスできません。これは、eval
と async function 式のコードを使用した場合と異なります。
AsyncFunction
コンストラクターを(new
演算子を使用せずに)関数として実行した場合、コンストラクターとして呼び出したときと同じ効果があります。
プロパティ
AsyncFunction.length
AsyncFunction
コンストラクターの length プロパティの値は1。AsyncFunction.prototype
- すべての async function オブジェクトにプロパティを追加できる。
AsyncFunction
プロトタイプオブジェクト
プロパティ
AsyncFunction.constructor
- 初期値は
AsyncFunction
。 AsyncFunction.prototype[@@toStringTag]
- "AsyncFunction" を返す。
AsyncFunction
インスタンス
AsyncFunction
インスタンスはメソッドとプロパティを AsyncFunction.prototype
から継承します。すべてのコンストラクターと同様に、コンストラクターのプロトタイプオブジェクトを変更して、すべての AsyncFunction
インスタンスを変更できます。
例
AsyncFunction
コンストラクターから async function を生成する
function resolveAfter2Seconds(x) { return new Promise(resolve => { setTimeout(() => { resolve(x); }, 2000); }); } var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor var a = new AsyncFunction("a", "b", "return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);"); a(10, 20).then(v => { console.log(v); // prints 30 after 4 seconds });
仕様
仕様 | ステータス | コメント |
---|---|---|
ECMAScript Async Functions async function の定義 |
ドラフト | 提案 |
ブラウザー実装状況
機能 | Chrome | Firefox (Gecko) | Internet Explorer | Edge | Opera | Safari (WebKit) |
---|---|---|---|---|---|---|
基本サポート | 55 | 52.0 (52.0) | ? | ? | 42 | ? |
機能 | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|
基本サポート | ? | ? | 52.0 (52.0) | ? | 42 | ? | 55 |