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(arg1, functionBody)
new AsyncFunction(arg1, arg2, functionBody)
new AsyncFunction(arg1, arg2, /* …, */ argN, functionBody)

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

备注: 无论是否使用 new 调用 AsyncFunction(),都可以创建一个新的 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); // 4 秒过后,输出 30
});

规范

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

浏览器兼容性

BCD tables only load in the browser

参见