async function-Ausdruck
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2017 browserübergreifend verfügbar.
Mit den Schlüsselwörtern async function können Sie eine asynchrone Funktion innerhalb eines Ausdrucks definieren.
Sie können asynchrone Funktionen auch mit einer async function-Deklaration oder der Pfeilfunktionssyntax definieren.
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
}
Hinweis:
Eine Ausdrucksanweisung darf nicht mit den Schlüsselwörtern async function beginnen, um Mehrdeutigkeiten mit einer async function-Deklaration zu vermeiden. Die Schlüsselwörter async function leiten nur dann einen Ausdruck ein, wenn sie in einem Kontext stehen, in dem keine Anweisungen zulässig sind.
Parameter
nameOptional-
Der Funktionsname. Er kann weggelassen werden; in diesem Fall ist die Funktion anonym. Der Name ist nur innerhalb des Funktionskörpers verfügbar.
paramNOptional-
Der Name eines formalen Parameters der Funktion. Informationen zur Syntax von Parametern finden Sie in der Referenz zu Funktionen.
statementsOptional-
Die Anweisungen, aus denen der Funktionskörper besteht.
Beschreibung
Ein async function-Ausdruck ähnelt einer async function-Deklaration stark und hat nahezu dieselbe Syntax. Der Hauptunterschied ist der Funktionsname: In einem async function-Ausdruck kann er weggelassen werden, um eine anonyme Funktion zu erstellen. Ein async function-Ausdruck kann als IIFE (Immediately Invoked Function Expression) verwendet werden. Diese wird unmittelbar nach ihrer Definition ausgeführt und ermöglicht es Ihnen, top-level await nachzubilden. Weitere Informationen finden Sie im Kapitel über Funktionen.
Beispiele
>Einen async function-Ausdruck verwenden
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.
});
Asynchrone IIFE
Mit einer asynchronen IIFE können Sie await und for...await in Kontexten verwenden, in denen top-level await nicht verfügbar ist. Hier verwenden wir eine Pfeilfunktion, um die IIFE zu definieren. Sie können dafür aber auch async function-Ausdrücke verwenden.
const getFileStream = async (url) => {
// implementation
};
(async () => {
const stream = await getFileStream("http://hfffh89d85a7bece740f3swc9xf5okw90f6wxf.ffgi.hlju.cwkeji.cn/path/file.ext");
for await (const chunk of stream) {
console.log({ chunk });
}
})();
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-async-function-definitions> |