异步函数表达式

基线 广泛可用

此功能已得到充分建立,并在许多设备和浏览器版本中运行。自 2017 年 4 月.

async function 关键字可用于在表达式中定义异步函数。

您也可以使用 async function 声明箭头语法 来定义异步函数。

语法

js
async function (param0) {
  statements
}
async function (param0, param1) {
  statements
}
async function (param0, param1, /* …, */ paramN) {
  statements
}

async function name(param0) {
  statements
}
async function name(param0, param1) {
  statements
}
async function name(param0, param1, /* …, */ paramN) {
  statements
}

注意: 表达式语句 不能以 async function 关键字开头,以避免与 async function 声明 模糊。async function 关键字仅在它们出现在不能接受语句的上下文中时才开始一个表达式。

参数

name 可选

函数名称。可以省略,在这种情况下,函数是匿名的。名称仅对函数体局部。

paramN 可选

函数的形式参数名称。有关参数的语法,请参见 函数参考

statements 可选

构成函数体的语句。

描述

async function 表达式非常类似于 async function 声明,并且具有几乎相同的语法。async function 表达式和 async function 声明之间的主要区别在于函数名称,它可以在 async function 表达式中省略以创建匿名函数。async function 表达式可以用作 IIFE(立即调用函数表达式),它在定义后立即运行,允许您模仿 顶层 await。另请参见有关 函数 的章节以获取更多信息。

示例

使用 async function 表达式

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

// async function expression assigned to a variable
const add = async function (x) {
  const a = await resolveAfter2Seconds(20);
  const b = await resolveAfter2Seconds(30);
  return x + a + b;
};

add(10).then((v) => {
  console.log(v); // prints 60 after 4 seconds.
});

// async function expression used as an IIFE
(async function (x) {
  const p1 = resolveAfter2Seconds(20);
  const p2 = resolveAfter2Seconds(30);
  return x + (await p1) + (await p2);
})(10).then((v) => {
  console.log(v); // prints 60 after 2 seconds.
});

规范

规范
ECMAScript 语言规范
# sec-async-function-definitions

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅