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* 声明定义一个异步生成器函数。

尝试一下

语法

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 Language Specification
# sec-async-generator-function-definitions

浏览器兼容性

BCD tables only load in the browser

参见