async function* 表达式
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
async function*
关键字可用于在表达式中定义一个异步生成器函数。
你也可以使用 async function*
声明定义一个异步生成器函数。
尝试一下
async function* foo() { yield await Promise.resolve("a"); yield await Promise.resolve("b"); yield await Promise.resolve("c"); } let str = ""; async function generate() { for await (const val of foo()) { str = str + val; } console.log(str); } generate(); // 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
规范
Specification |
---|
ECMAScript® 2026 Language Specification # sec-async-generator-function-definitions |