Spec-Zone.ru › JavaScript

Выражение 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 });
  }
})();

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-async-function-definitions

Совместимость с браузерами

Настольные компьютеры Мобильные Сервер
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

См. также

  • Руководство по функциям
  • Функции
  • async function
  • AsyncFunction
  • await

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API