--- title: async function expression slug: Web/JavaScript/Reference/Operators/async_function translation_of: Web/JavaScript/Reference/Operators/async_function ---
Ключевое слово async function используется для определения асинхронной функции внутри выражений.
Вы также можете определить асинхронные функции при помощи инструкции async function.
async function [name]([param1[, param2[, ..., paramN]]]) {
   statements
}
Согласно спецификации ES2015, вы также можете использовать стрелочные функции.
nameparamNstatementsВыражение async function очень похоже, и имеет почти тот же синтаксис, что и {{jsxref('Statements/async_function', 'async function statement')}}. Главное отличие между выражениями async function и объявлениями async function заключается в имени функции, которое может быть опущено в выражении async function для создания анонимной функции. Выражение async function можно использовать в виде {{Glossary("IIFE")}} (Immediately Invoked Function Expression), и оно будет запущено сразу после объявления. Смотрите также главу о функциях.
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 | 
|---|---|---|
| {{SpecName('ESDraft', '#sec-async-function-definitions', 'async function')}} | {{Spec2('ESDraft')}} | Initial definition in ES2017. | 
{{Compat}}