async function* expression
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.
Theasync function* keywords can be used to define an async generator function inside an expression.
You can also define async generator functions using theasync function* declaration.
In this article
Try it
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"Syntax
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}Note:Anexpression statement cannot begin with the keywordsasync function to avoid ambiguity with anasync function* declaration. Theasync function keywords only begin an expression when they appear in a context that cannot accept statements.
Parameters
nameOptionalThe function name. Can be omitted, in which case the function isanonymous. The name is only local to the function body.
paramNOptionalThe name of a formal parameter for the function. For the parameters' syntax, see theFunctions reference.
statementsOptionalThe statements which comprise the body of the function.
Description
Anasync function* expression is very similar to, and has almost the same syntax as, anasync function* declaration. The main difference between anasync function* expression and anasync function* declaration is thefunction name, which can be omitted inasync function* expressions to createanonymous functions. Anasync function* expression can be used as anIIFE (Immediately Invoked Function Expression) which runs as soon as it is defined, allowing you to create an ad-hocasync iterable object. See also the chapter aboutfunctions for more information.
Examples
>Using async function* expression
The following example defines an unnamed asynchronous generator function and assigns it tox. The function yields the square of its argument:
const x = async function* (y) { yield Promise.resolve(y * y);};x(6) .next() .then((res) => console.log(res.value)); // 36Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-async-generator-function-definitions> |