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 April 2017.

Die async function Schlüsselwörter können verwendet werden, um eine asynchrone Funktion innerhalb eines Ausdrucks zu definieren.

Sie können auch asynchrone Funktionen mit der async function Deklaration oder der Arrow-Syntax definieren.

Syntax

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
}

Hinweis: Eine Ausdrucksanweisung kann nicht mit den Schlüsselwörtern async function beginnen, um Mehrdeutigkeiten mit einer async function Deklaration zu vermeiden. Die async function Schlüsselwörter beginnen nur dann einen Ausdruck, wenn sie in einem Kontext erscheinen, der keine Anweisungen akzeptieren kann.

Parameter

name Optional

Der Funktionsname. Kann weggelassen werden, in diesem Fall ist die Funktion anonym. Der Name ist nur innerhalb des Funktionskörpers lokal.

paramN Optional

Der Name eines formalen Parameters für die Funktion. Für die Syntax der Parameter siehe die Funktionsreferenz.

statements Optional

Die Anweisungen, die den Körper der Funktion bilden.

Beschreibung

Ein async function Ausdruck ist dem einer async function Deklaration sehr ähnlich und hat fast die gleiche Syntax. Der Hauptunterschied zwischen einem async function Ausdruck und einer async function Deklaration ist der Funktionsname, der bei async function Ausdrücken weggelassen werden kann, um anonyme Funktionen zu erstellen. Ein async function Ausdruck kann als IIFE (sofortig ausgeführter Funktionsausdruck) verwendet werden, der ausgeführt wird, sobald er definiert ist, und Sie es so ermöglicht, top-level await zu imitieren. Weitere Informationen finden Sie im Kapitel über Funktionen.

Beispiele

Verwendung eines async function Ausdrucks

js
function resolveAfter2Seconds(x) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

// async function expression assigned to a variable
const add = async function (x) {
  const a = await resolveAfter2Seconds(20);
  const b = await resolveAfter2Seconds(30);
  return x + a + b;
};

add(10).then((v) => {
  console.log(v); // prints 60 after 4 seconds.
});

// async function expression used as an IIFE
(async function (x) {
  const p1 = resolveAfter2Seconds(20);
  const p2 = resolveAfter2Seconds(30);
  return x + (await p1) + (await p2);
})(10).then((v) => {
  console.log(v); // prints 60 after 2 seconds.
});

Async IIFE

Eine async IIFE erlaubt die Verwendung von await und for...await in Kontexten, in denen top-level await nicht verfügbar ist. Hier verwenden wir eine Arrow-Funktion, um die IIFE zu definieren, aber async function Ausdrücke können ebenfalls verwendet werden.

js
const getFileStream = async (url) => {
  // implementation
};

(async () => {
  const stream = await getFileStream("https://domain.name/path/file.ext");
  for await (const chunk of stream) {
    console.log({ chunk });
  }
})();

Spezifikationen

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch