async function 表示式
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。有關更多資訊,另請參閱有關函式的章節。
示例
使用非同步函式表示式
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.
});
非同步 IIFE
在不支援頂層 await 的上下文中,async IIFE 允許你使用 await 和 for...await。這裡我們使用箭頭函式來定義 IIFE,但也可以使用 async function 表示式。
js
const getFileStream = async (url) => {
// implementation
};
(async () => {
const stream = await getFileStream("https://domain.name/path/file.ext");
for await (const chunk of stream) {
console.log({ chunk });
}
})();
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-async-function-definitions |
瀏覽器相容性
載入中…