試一試
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 |
瀏覽器相容性
載入中…