AsyncFunction コンストラクターは、新しい 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 の定義
ドラフト 提案

ブラウザー実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeEdge MobileAndroid 版 FirefoxAndroid 版 OperaiOS 版 SafariSamsung InternetNode.js
基本対応Chrome 完全対応 55Edge ? Firefox 完全対応 52IE 未対応 なしOpera 完全対応 42Safari ? WebView Android 完全対応 55Chrome Android 完全対応 55Edge Mobile ? Firefox Android 完全対応 52Opera Android 完全対応 42Safari iOS ? Samsung Internet Android 完全対応 6.0nodejs 完全対応 7.6.0
完全対応 7.6.0
完全対応 7.0.0
無効
無効 From version 7.0.0: this feature is behind the --harmony runtime flag.
prototypeChrome 完全対応 55Edge ? Firefox 完全対応 52IE 未対応 なしOpera 完全対応 42Safari ? WebView Android ? Chrome Android 完全対応 55Edge Mobile ? Firefox Android 完全対応 52Opera Android 完全対応 42Safari iOS ? Samsung Internet Android 完全対応 6.0nodejs 完全対応 7.6.0
完全対応 7.6.0
完全対応 7.0.0
無効
無効 From version 7.0.0: this feature is behind the --harmony runtime flag.

凡例

完全対応  
完全対応
未対応  
未対応
実装状況不明  
実装状況不明
ユーザーが明示的にこの機能を有効にしなければなりません。
ユーザーが明示的にこの機能を有効にしなければなりません。

関連項目

ドキュメントのタグと貢献者

このページの貢献者: apple502j, swallow-life, YuichiNukiyama, DanielHerr
最終更新者: apple502j,