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 (Immediately Invoked Function Expression) として使うことができ、アドホックな非同期反復可能オブジェクトを作成することができます。詳しくは関数の章も参照してください。

async function* の使用

次の例では、無名の非同期ジェネレーター関数を定義し、それを x に代入しています。この関数は引数の2乗を返します。

js
const x = async function* (y) {
  yield Promise.resolve(y * y);
};
x(6)
  .next()
  .then((res) => console.log(res.value)); // 36

仕様書

Specification
ECMAScript® 2025 Language Specification
# sec-async-generator-function-definitions

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
async function* expression

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

関連情報