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 完全対応 10.1WebView Android 完全対応 55Chrome Android 完全対応 55Firefox Android 完全対応 52Opera Android 完全対応 42Safari iOS 完全対応 10.3Samsung 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 完全対応 10.1WebView Android 完全対応 55Chrome Android 完全対応 55Firefox Android 完全対応 52Opera Android 完全対応 42Safari iOS 完全対応 10.3Samsung 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.

凡例

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

関連情報