
Урок 10 · 14 хв
Асинхронність
Запит іде довго. Код не чекає — отже, потрібен спосіб дочекатися.
Запит до сервера займає час. JavaScript не стоїть на місці: він надсилає запит і йде далі, а результат приходить пізніше. Тому потрібен спосіб сказати «коли дані прийдуть — зроби ось це».
Раніше це розв'язували колбеками: передавали функцію, яку викличуть потім. На двох-трьох вкладених запитах код перетворювався на драбину з дужок. Тепер замість колбека повертають Promise — об'єкт, який обіцяє значення пізніше.
async і await
await ставиться всередині async-функції й чекає, доки проміс виконається. Сама async-функція завжди повертає проміс, навіть якщо всередині написано return 1. Тому її виклик теж доводиться await-ити або обробляти через .then().
Послідовно й паралельно
Promise.all бере масив промісів і чекає всі одразу. Якщо один відхилиться — відхилиться і весь all. Послідовний await залишай для випадку, коли другий запит залежить від результату першого.
- MDN · Promise — стани, then, catch
- MDN · async function — функція, яка завжди повертає проміс
- MDN · await — зняти значення з проміса
- MDN · Promise.all — запустити запити паралельно
Перевірка
Закріпи, поки не пішов далі
1. Що надрукує
console.log(loadTotal()), якщо функція повертає проміс?2. Що поверне
async function f() { return 1 }під час виклику?3. Три незалежні запити. Як отримати результати найшвидше?
4. Проміс усередині
awaitвідхилився. Що станеться без try/catch?