Уроки модуля (2/4)
асинхронный / ожидание
async/await — более понятный синтаксис для работы с промисами: код ** читается как
синхронный код**, но за кулисами он использует точно такие же промисы, что и в предыдущем уроке.
async function
Функция, объявленная с помощью async всегда возвращает обещание.
async function forty() {
return 40;
}
forty(); // Promise { 40 }
forty().then((v) => console.log(v)); // 40Даже если вы возвращаете «нормальное» значение, функция оборачивает его в разрешенный промис.
await
Внутри async function вы можете поставить await перед обещанием: выполнение приостановлено
до тех пор, пока обещание не будет выполнено, затем продолжается с разрешенным значением.
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 распространяет ошибки
Если обещание отклонено, 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. Используйте await.
Показать подсказку
константа п = ожидание р; вернуть n + 1;
Решение доступно после 3 попыток
Обзор упражнения
Определите `sumTwo(pa, pb)` асинхронно: получает два промиса чисел, возвращает их сумму. Используйте два последовательных ожидания.
Показать подсказку
дождитесь каждого, затем верните a + b.
Решение доступно после 3 попыток