Выражение async function
Базовый уровень Широко доступен
Эта функция является общепринятой и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с апреля 2017 года.
Ключевые слова async function можно использовать для определения асинхронной функции внутри выражения.
Вы также можете определять асинхронные функции с помощью async function объявления или синтаксиса стрелочных функций.
Синтаксис
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
}
Примечание: Выражение-инструкция не может начинаться с ключевых слов async function, чтобы избежать неоднозначности с async function объявлением. Ключевые слова async function начинают выражение только тогда, когда они появляются в контексте, который не может принимать инструкции.
Параметры
-
nameНеобязательный - Имя функции. Может быть опущено, в этом случае функция является анонимной. Имя является локальным только для тела функции.
-
paramNНеобязательный - Имя формального параметра для функции. Синтаксис параметров см. в Справке по функциям.
-
statementsНеобязательный - Инструкции, составляющие тело функции.
Описание
async function выражение очень похоже на async function объявление и имеет почти такой же синтаксис. Основное отличие между async function выражением и async function объявлением — это имя функции, которое может быть опущено в async function выражениях для создания анонимных функций. async function выражение может использоваться как IIFE (Immediately Invoked Function Expression), которая выполняется сразу после определения, позволяя имитировать top-level await. Дополнительную информацию см. в главе о функциях.
Примеры
Использование выражения async function
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
async IIFE позволяет использовать await и for...await в контекстах, где top-level await недоступен. Здесь мы используем стрелочную функцию для определения IIFE, но также могут использоваться async function выражения.
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 });
}
})();
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
async_function |
55 |
15 |
52 |
42 |
10.1 |
55 |
52 |
42 |
10.3 |
6.0 |
55 |
10.3 |
1.0.0 |
1.0 |
7.6.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/async_function