--- title: await slug: Web/JavaScript/Reference/Operators/await tags: - JavaScript - Оператор - Функція translation_of: Web/JavaScript/Reference/Operators/await ---
{{jsSidebar("Operators")}}

Оператор await використовується для очікування на {{jsxref("Promise","проміс")}}. Він може використовуватись лише всередині {{jsxref("Statements/async_function", "асинхронної функції")}}.

Синтаксис

[rv] = await expression;
expression
{{jsxref("Promise","Проміс")}} чи будь-яке інше значення, якого треба дочекатись.
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")}}

Див. також