async function 表示式

Baseline 已廣泛支援

該特性已非常成熟,可在多種裝置和瀏覽器版本上使用。自 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。有關更多資訊,另請參閱有關函式的章節。

示例

使用非同步函式表示式

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 允許你使用 awaitfor...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

瀏覽器相容性

另見