Модульні уроки (2/4)
async / очікування
async/await — це більш зрозумілий синтаксис для роботи з Promises: код читається так
синхронний код, але за лаштунками він використовує ті самі обіцянки, що й у попередньому уроці.
async function
Функція, оголошена за допомогою async always, повертає Promise.
async function forty() {
return 40;
}
forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40Навіть якщо ви повертаєте «звичайне» значення, функція загортає його в дозволений Promise.
await
Усередині async function ви можете поставити await перед Promise: виконання призупинено
доки Promise не вирівняється, потім продовжується з вирішеним значенням.
async function sum() {
const a = await Promise.resolve(10);
const b = await Promise.resolve(20);
return a + b; // 30
}Еквівалент у стилі .then (більш докладний):
function sum() {
return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}await поширює помилки
Якщо Promise відхилено, await повторює помилку. Ви можете зловити його звичайним
try/catch:
async function read() {
try {
const x = await Promise.reject(new Error('no'));
return x;
} catch (err) {
return 'error: ' + err.message;
}
}
read(); // Promise { 'error: no' }Стрілка асинхронна
const double = async (n) => n * 2;
double(5); // Promise { 10 }Спробуйте
Визначте «асинхронну функцію addOne(p)», яка отримує проміс числа та повертає (як проміс) число + 1. Використовуйте очікування.
Показати підказку
const n = очікувати p; повернути n + 1;
Рішення доступне після 3 спроб
Повторна вправа
Визначте `sumTwo(pa, pb)` async: отримує два Promises чисел, повертає їх суму. Використовуйте два послідовних очікування.
Показати підказку
чекайте кожного, а потім повертайте a + b.
Рішення доступне після 3 спроб