异步函数表达式
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 表格仅在浏览器中加载
另请参阅
- 函数 指南
- 函数
异步函数
AsyncFunction
等待