试一试
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 |
浏览器兼容性
加载中…