await
Оператор await
використовується для очікування на проміс
. Він може використовуватись лише всередині асинхронної функції
.
Синтаксис
[rv] = await expression;
expression
Проміс
чи будь-яке інше значення, якого треба дочекатись.rv
-
Повертає значення виконаного проміса, або саме значення, якщо це не об'єкт
Promise
.
Опис
Вираз await
спричиняє призупинення виконання асинхронної функції до встановлення об'єкта Promise
(проміс) (тобто, до його вирішення або відхилення), а також відновлює виконання асинхронної функції після його завершення. Після відновлення, значенням виразу await
є значення виконаного проміса.
Якщо проміс відхилено, вираз await
викидає значення відхилення.
Якщо значення виразу, що стоїть після оператора await
, не є об'єктом Promise
, воно перетворюється на вирішений проміс.
Оператор await
може розбивати хід виконання, дозволяючи коду, що викликав функцію з await
, відновити виконання ще до того, як буде продовжене відкладене виконання функції з await
. Після того, як await
відкладає продовження своєї функції, якщо це перший оператор await
, що виконується функцією, негайне виконання також продовжується поверненням у код, що викликав функцію, проміса у стані очікування для завершення виконання функції з await
та для відновлення виконання коду, що її викликав.
Приклади
Якщо у вираз await
був переданий проміс, то вираз чекає на виконання проміса та повертає значення, що є результатом виконання.
function resolveAfter2Seconds(x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x);
}, 2000);
});
}
async function f1() {
var x = await resolveAfter2Seconds(10);
console.log(x); // 10
}
f1();
Промісоподібні об'єкти
виконуватимуться так само.
async function f2() {
const thenable = {
then: function(resolve, _reject) {
resolve('вирішений!')
}
};
console.log(await thenable); // вирішений!
}
f2();
Якщо значенням є не проміс, він перетворює його на вирішений проміс та чекає на нього.
async function f3() {
var y = await 20;
console.log(y); // 20
}
f3();
Якщо проміс відхилено, викидається значення відхилення.
async function f4() {
try {
var z = await Promise.reject(30);
} catch(e) {
console.log(e); // 30
}
}
f4();
Обробити відхилений проміс без блока try.
var response = await promisedFunction().catch((err) => { console.log(err); });
// якщо проміс відхилено, значенням response буде undefined
Специфікації
Сумісність з веб-переглядачами
BCD tables only load in the browser