Оператор await используется для ожидания окончания Promise. Может быть использован только внутри async function.

Синтаксис

[rv] = await expression;
expression
Promise или любое другое значение для ожидания разрешения.
rv

Возвращает полученное из Promise значение, либо само значение, если оно не является Promise.

Описание

Оператор await заставляет функцию, объявленную с использованиием оператора async, ждать выполнения Promise и продолжать выполнение после возвращения Promise значения. Впоследствии возвращает полученное из  Promise значение. Если типом значения, к которому был применен оператор await, является не Promise, то значение приводится к успешно выполненному Promise.

Если Promise отклоняется, то await генерирует исключение с отклонённым значением.

Примеры

await ожидает разрешения Promise и возвращает полученное значение.

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

async function f1() {
  var x = await resolveAfter2Seconds(10);
  console.log(x); // 10
}
f1();

Если типом значения является не Promise, значение преобразуется к успешно выполненному Promise.

async function f2() {
  var y = await 20;
  console.log(y); // 20
}
f2();

Если Promise отклонен, то выбрасывается исключение с переданным значением.

async function f3() {
  try {
    var z = await Promise.reject(30);
  } catch(e) {
    console.log(e); // 30
  }
}
f3();

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

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

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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 55 (Да) 52.0 (52.0) ? 42 10.1
Feature Android Android Webview Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support (Да) (Да) (Да) 52.0 (52.0) ? 42 10.1 55

See also

Метки документа и участники

 Внесли вклад в эту страницу: Vladimir-Vinogradov, matvey-b, XaveScor, redishko
 Обновлялась последний раз: Vladimir-Vinogradov,