async function* 表示式

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流瀏覽器均已支援。

async function* 關鍵字可用於在表示式內部定義非同步生成器函式。

你還可以使用 async function* 宣告來定義非同步生成器函式。

試一試

async function joinAll(generator) {
  let str = "";
  for await (const val of generator()) {
    str += val;
  }
  return str;
}
joinAll(async function* () {
  yield await Promise.resolve("a");
  yield await Promise.resolve("b");
  yield await Promise.resolve("c");
}).then((str) => console.log(str));
// Expected output: "abc"

語法

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(立即呼叫的函式表示式),它在定義後立即執行,允許你建立臨時的 非同步可迭代物件。另請參閱有關 函式的章節以獲取更多資訊。

示例

使用 async function* 表示式

以下示例定義了一個未命名的非同步生成器函式並將其賦值給 x。該函式產生其引數的平方

js
const x = async function* (y) {
  yield Promise.resolve(y * y);
};
x(6)
  .next()
  .then((res) => console.log(res.value)); // 36

規範

規範
ECMAScript® 2026 語言規範
# sec-async-generator-function-definitions

瀏覽器相容性

另見