Перейти до основного вмісту
Модуль 7 · Урок 2 із 426/32 у курсі~12 min
Модульні уроки (2/4)

async / очікування

async/await — це більш зрозумілий синтаксис для роботи з Promises: код читається так синхронний код, але за лаштунками він використовує ті самі обіцянки, що й у попередньому уроці.

async function

Функція, оголошена за допомогою async always, повертає Promise.

JS
async function forty() {
  return 40;
}

forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40

Навіть якщо ви повертаєте «звичайне» значення, функція загортає його в дозволений Promise.

await

Усередині async function ви можете поставити await перед Promise: виконання призупинено доки Promise не вирівняється, потім продовжується з вирішеним значенням.

JS
async function sum() {
  const a = await Promise.resolve(10);
  const b = await Promise.resolve(20);
  return a + b; // 30
}

Еквівалент у стилі .then (більш докладний):

JS
function sum() {
  return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}

await поширює помилки

Якщо Promise відхилено, await повторює помилку. Ви можете зловити його звичайним try/catch:

JS
async function read() {
  try {
    const x = await Promise.reject(new Error('no'));
    return x;
  } catch (err) {
    return 'error: ' + err.message;
  }
}

read(); // Promise { 'error: no' }

Стрілка асинхронна

JS
const double = async (n) => n * 2;
double(5); // Promise { 10 }

Спробуйте

вправи#js.m7.l2.e1
Спроби: 0Завантаження…

Визначте «асинхронну функцію addOne(p)», яка отримує проміс числа та повертає (як проміс) число + 1. Використовуйте очікування.

Завантаження редактора…
Показати підказку

const n = очікувати p; повернути n + 1;

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m7.l2.e2
Спроби: 0Завантаження…

Визначте `sumTwo(pa, pb)` async: отримує два Promises чисел, повертає їх суму. Використовуйте два послідовних очікування.

Завантаження редактора…
Показати підказку

чекайте кожного, а потім повертайте a + b.

Рішення доступне після 3 спроб