AsyncFunction

AsyncFunction コンストラクターは、新しい async function オブジェクトを生成します。 JavaScript では、すべての非同期関数が実際に 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 で定義してからコード内で呼び出す方法ほど有効ではありません。なぜなら、そのような関数はコードの残りの部分と共にパースされるからです。

関数に渡されたすべての引数は、作成される関数内の引数の識別子名として渡されます。

メモ: async functionAsyncFunction コンストラクターでによって生成されると、生成コンテキストのクロージャーには生成されません。常にグローバルスコープに生成されます。実行すると、ローカル変数とグローバルグローバル変数にのみアクセスでき、 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 Latest Draft (ECMA-262)
AsyncFunction object の定義
ドラフト ES2017 で初回定義

ブラウザーの互換性

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
AsyncFunctionChrome 完全対応 55Edge 完全対応 15Firefox 完全対応 52IE 未対応 なしOpera 完全対応 42Safari ? WebView Android 完全対応 55Chrome Android 完全対応 55Firefox 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 完全対応 15Firefox 完全対応 52IE 未対応 なしOpera 完全対応 42Safari ? WebView Android 完全対応 55Chrome Android 完全対応 55Firefox 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.

凡例

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

関連情報