Documentación offline JavaScript main

async function expression

main Documentación oficial Licencia CC-BY-SA-2.5Descargado el 2026-08-02

En esta página

The async function* keywords can be used to define an async generator function inside an expression.

You can also define async generator functions using the async function* declaration.

{{InteractiveExample("JavaScript Demo: async function* expression", "taller")}}

```js interactive-example 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

```js-nolint
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 expression statement cannot begin with the keywords async function to avoid ambiguity with an async function* declaration. The async function keywords only begin an expression when they appear in a context that cannot accept statements.

Parameters#

  • name {{optional_inline}}
  • : The function name. Can be omitted, in which case the function is anonymous. The name is only local to the function body.
  • paramN {{optional_inline}}
  • : The name of a formal parameter for the function. For the parameters' syntax, see the Functions reference.
  • statements {{optional_inline}}
  • : The statements which comprise the body of the function.

Description#

An async function* expression is very similar to, and has almost the same syntax as, an async function* declaration. 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 IIFE (Immediately Invoked Function Expression) which runs as soon as it is defined, allowing you to create an ad-hoc async iterable object. See also the chapter about functions for more information.

Examples#

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:

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

Specifications#

{{Specifications}}

Browser compatibility#

{{Compat}}

See also#

  • Functions guide
  • Functions
  • {{jsxref("Statements/async_function", "async function")}}
  • {{jsxref("AsyncGeneratorFunction")}}
  • Iteration protocols
  • {{jsxref("Operators/yield", "yield")}}
  • {{jsxref("Operators/yield", "yield")}}