await
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since маÑÑ 2017 г..
* Some parts of this feature may have varying levels of support.
ÐпеÑаÑÐ¾Ñ 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® 2027 Language Specification > # sec-async-function-definitions > |