async function expression

Ключевое слово async function используется для определения асинхронной функции внутри выражений.

Вы также можете определить асинхронные функции при помощи инструкции async function.

Синтаксис

async function [name]([param1[, param2[, ..., paramN]]]) {
   statements
}

Согласно спецификации ES2015, вы также можете использовать стрелочные функции.

Параметры

name

Имя функции. Этот параметр может быть опущен, в этом случае говорят об анонимной функции. Имя используется только в теле функции.

paramN

Имя аргумента, передаваемого функции.

statements

Инструкции, составляющие тело функции.

Описание

Выражение async function очень похоже, и имеет почти тот же синтаксис, что и async function statement. Главное отличие между выражениями async function и объявлениями async function заключается в имени функции, которое может быть опущено в выражении async function для создания анонимной функции. Выражение async function можно использовать в виде IIFE (Immediately Invoked Function Expression), и оно будет запущено сразу после объявления. Смотрите также главу о функциях.

Примеры

Простой пример

js

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

(async function (x) {
  // выражение асинхронной функции в виде IIFE
  var a = resolveAfter2Seconds(20);
  var b = resolveAfter2Seconds(30);
  return x + (await a) + (await b);
})(10).then((v) => {
  console.log(v); // выведет 60 после 2 секунд.
});

var add = async function (x) {
  // назначение выражения асинхронной функции переменной
  var a = await resolveAfter2Seconds(20);
  var b = await resolveAfter2Seconds(30);
  return x + a + b;
};

add(10).then((v) => {
  console.log(v); // выведет 60 после 4 секунд.
});

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

Specification Status Comment
ECMAScript (ECMA-262)
Определение 'async function' в этой спецификации.
Живой стандарт Initial definition in ES2017.

Поддержка браузерами

BCD tables only load in the browser

Смотрите также