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"
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 } Note: An
cannot begin with the keywords async function to avoid ambiguity with an
. The async function keywords only begin an expression when they appear in a context that cannot accept statements.
The function name. Can be omitted, in which case the function is anonymous. The name is only local to the function body.
The name of a formal parameter for the function. For the parameters' syntax, see the
.
The statements which comprise the body of the function.
An async function* expression is very similar to, and has almost the same syntax as, an
. The main difference between an async function* expression and an async function* declaration is the function name, which can be omitted in async function* expressions to create anonymous functions. An async function* expression can be used as an
(Immediately Invoked Function Expression) which runs as soon as it is defined, allowing you to create an ad-hoc
. See also the chapter about
for more information.
Using async function* expression
The following example defines an unnamed asynchronous generator function and assigns it to x. The function yields the square of its argument:
js
const x = async function* (y) { yield Promise.resolve(y * y); }; x(6) .next() .then((res) => console.log(res.value)); // 36
Specification
ECMAScript® 2027 Language Specification# sec-async-generator-function-definitions
guide