Get to know MDN better
此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
async function* 声明创建一个绑定到给定名称的新异步生成器函数。
你也可以使用 async function* 表达式来定义异步生成器函数。
备注:箭头函数不能用来定义异步生成器函数。
备注:function 和 * 是两个单独的标记,因此它们可以用空白或换行符分隔。然而,如果 async 和 function 之间有换行符,则会自动插入分号,导致 async 成为标识符,而其余内容成为 function* 声明。
函数名称。
param 可选函数的形参名称。有关参数的语法,请参阅函数参考。
statements 可选构成函数体的语句。
async function* 声明创建一个 AsyncGeneratorFunction 对象。每次调用异步生成器函数时,它都会返回一个新的 AsyncGenerator 对象,该对象符合异步迭代器协议。每次调用 next() 都会返回一个 Promise 对象,该对象会兑现为迭代器结果对象。
异步生成器函数兼具异步函数和生成器函数的特性。你可以在函数体中使用 await 和 yield 关键字。这使你能够使用 await 优雅的地处理异步任务,同时利用生成器函数的惰性。
当从异步生成器产生一个 promsie 时,迭代器结果 promise 的最终状态将与生成器产生的 promise 状态相同。例如:
因为如果生成的 promise 被拒绝,迭代器的结果也将被拒绝,所以将输出 1。异步生成器兑现结果的 value 将不会是另一个 promise。
async function* 声明的行为类似于 function 声明,它会被提升到其作用域的顶部,并且可以在其作用域的任何位置被调用,并且只能在其他上下文中被重新声明。
异步生成器函数总是产生结果 promise——即使每个 yield 步骤是同步的。
在这个示例中,我们使用 Node 的 fs/promises 模块读取一系列文件并且仅当请求时获取它的内容。
| ECMAScript® 2027 Language Specification # sec-async-generator-function-definitions |
启用 JavaScript 以查看此浏览器兼容性表。