await
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2017.
Оператор 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();
Обработка отклонённого Promise
без try/catch
блока.
var response = await promisedFunction().catch((err) => {
console.log(err);
});
// response получит значение undefined, если Promise будет отклонён
Спецификации
Specification |
---|
ECMAScript Language Specification # sec-async-function-definitions |
Совместимость с браузерами
BCD tables only load in the browser