Проверяет понимание обработки ошибок в цепочке промисов при использовании Promise.reject и последующих .then/.catch.
Когда промис отклоняется с помощью Promise.reject, выполнение цепочки переходит к ближайшему обработчику .catch. Это позволяет централизованно обрабатывать ошибки, не прерывая всю цепочку. Если .catch успешно обработал ошибку и вернул значение (даже undefined), то это значение оборачивается в resolved промис, и цепочка продолжается с последующих .then. Если же .catch сам выбрасывает исключение или возвращает rejected промис, то управление передаётся следующему .catch.
Promise.reject('Ошибка 1')
.then(() => console.log('Это не выполнится'))
.catch(err => {
console.log('Поймана ошибка:', err);
return 'Восстановлено';
})
.then(value => console.log('Получено:', value))
.catch(err => console.log('Не поймано:', err));
// Вывод:
// Поймана ошибка: Ошибка 1
// Получено: ВосстановленоВ этом примере первый .then пропускается, так как промис отклонён. .catch перехватывает ошибку и возвращает строку 'Восстановлено', которая становится resolved значением для следующего .then. Если бы .catch выбросил новую ошибку, то сработал бы второй .catch.
Такой подход используется в асинхронных операциях, например, при запросах к API, чтении файлов или работе с базами данных. Он позволяет гибко обрабатывать ошибки и восстанавливать поток выполнения без вложенных колбэков.
Вывод: Понимание цепочки промисов и обработки ошибок через .catch необходимо для написания надёжного асинхронного кода, особенно в сценариях, где требуется восстановление после сбоев или логирование ошибок.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию