此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
异步函数(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 2017年4月.
async function 关键字可用于定义表达式中的异步函数。
你还可以使用异步函数声明。
In this article
语法
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可选构成函数主体的语句。
描述
async function 表达式与异步函数语句非常相似,语法也基本相同。异步function 表达式和异步function 语句之间的主要区别在于函数名称,它可以在async function 表达式中省略,从而创建一个匿名函数。async function 表达式可以用作IIFE(立即执行函数表达式,Immediately Invoked Function Expression),它在定义后立即运行。参见函数章节以获取更多信息。
示例
>简单示例
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® 2026 Language Specification> # sec-async-function-definitions> |