Уроки модуля (1/4)
Обещания: что это такое
Обещание – это значение, представляющее результат операции, которая завершится в будущем. Он может находиться в одном из трех состояний:
- pending — операция еще продолжается.
- выполнено — завершено успешно, есть значение
- rejected — не удалось, есть ошибка
Как только он выходит из состояния ожидания, он «рассчитывается» навсегда.
Создание решенного промиса
Два самых распространенных способа — вы почти никогда не создадите Promise «вручную» с помощью конструктора:
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));Чтение результата: .then / .catch
Promise.resolve(10).then((v) => {
console.log(v); // 10
});
Promise.reject(new Error('no')).catch((e) => {
console.log(e.message); // 'no'
});.then получает функцию, которая вызывается с разрешенным значением.
.catch получает функцию, вызываемую с ошибкой в случае отклонения.
Цепочка
Каждый .then, в свою очередь, возвращает Promise: вы можете объединить их, чтобы преобразовать
значение шаг за шагом.
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11Если какой-либо из .then выдает (или возвращает невыполненное обещание), выполнение
переходит к первому последующему .catch.
Конструктор (редкий)
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) resolve('ok');
else reject(new Error('no'));
});Вы будете использовать его только тогда, когда вам нужно «пообещать» что-то, использующее обратные вызовы (например, старые API-интерфейсы DOM или setTimeout).
Попробуйте это
Определите `promizedVersion(n)`, который по заданному числу возвращает обещание, разрешенное с двойным значением n.
Показать подсказку
вернуть Promise.resolve(n * 2)
Решение доступно после 3 попыток
Обзор упражнения
Определите `incrementThree(p)`, который получает обещание числа и возвращает обещание числа + 3. Используйте цепочку .then.
Показать подсказку
p.then((n) => n + 3)
Решение доступно после 3 попыток