Оператор await используется для ожидания окончания Promise. Может быть использован только внутри async function.
Синтаксис
[rv] = await expression;
expressionPromiseили любое другое значение для ожидания разрешения.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 | Status | Comment |
|---|---|---|
| ECMAScript Latest Draft (ECMA-262) Определение 'async functions' в этой спецификации. |
Черновик | Initial definition in ES2017. |
Поддержка браузерами
| 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 |