AsyncFunction() コンストラクター

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.

AsyncFunction() コンストラクターは AsyncFunction オブジェクトを生成します。

なお、AsyncFunction はグローバルオブジェクトではないことに注意してください。これは以下のようなコードで取得することができます。

js
const AsyncFunction = async function () {}.constructor;

AsyncFunction() コンストラクターは直接使用することを意図されておらず、 Function() の説明で述べた注意事項はすべて AsyncFunction() に適用されます。

構文

js
new AsyncFunction(functionBody)
new AsyncFunction(arg0, functionBody)
new AsyncFunction(arg0, arg1, functionBody)
new AsyncFunction(arg0, arg1, /* … ,*/ argN, functionBody)

AsyncFunction(functionBody)
AsyncFunction(arg0, functionBody)
AsyncFunction(arg0, arg1, functionBody)
AsyncFunction(arg0, arg1, /* … ,*/ argN, functionBody)

メモ: AsyncFunction()new があってもなくても呼び出すことができます。どちらも新しい AsyncFunction インスタンスを生成します。

引数

Function() を参照してください。

AsyncFunction() コンストラクターから非同期関数を生成

js
function resolveAfter2Seconds(x) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

const AsyncFunction = async function () {}.constructor;

const fn = new AsyncFunction(
  "a",
  "b",
  "return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);",
);

fn(10, 20).then((v) => {
  console.log(v); // prints 30 after 4 seconds
});

仕様書

Specification
ECMAScript Language Specification
# sec-async-function-constructor

ブラウザーの互換性

BCD tables only load in the browser

関連情報