--- title: await slug: Web/JavaScript/Reference/Operators/await tags: - JavaScript - Оператор - Функція translation_of: Web/JavaScript/Reference/Operators/await ---
Оператор await
використовується для очікування на {{jsxref("Promise","проміс")}}. Він може використовуватись лише всередині {{jsxref("Statements/async_function", "асинхронної функції")}}.
[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();
{{jsxref("Global_Objects/Promise/then", "Промісоподібні об'єкти")}} виконуватимуться так само.
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
Специфікація |
---|
{{SpecName('ESDraft', '#sec-async-function-definitions', 'async functions')}} |
{{Compat("javascript.operators.await")}}