异步函数(async function)表达式
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.
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
}
异步函数也可以使用箭头语法进行定义。
参数
name
可选-
函数名称,可省略。如果省略则这个函数将成为匿名函数。该名称仅可在本函数中使用。
paramN
可选-
传入函数的形参名称。
statements
可选-
构成函数主体的语句。
描述
示例
简单示例
js
function resolveAfter2Seconds(x) {
return new Promise((resolve) => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
// 赋值给变量的异步函数表达式
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); // 4 秒后打印 60
});
// 用作 IIFE 的异步函数表达式
(async function (x) {
const p1 = resolveAfter2Seconds(20);
const p2 = resolveAfter2Seconds(30);
return x + (await p1) + (await p2);
})(10).then((v) => {
console.log(v); // 2 秒后打印 60
});
规范
Specification |
---|
ECMAScript Language Specification # sec-async-function-definitions |
浏览器兼容性
BCD tables only load in the browser