Проверяет понимание того, как ведёт себя цепочка промисов после обработки ошибки в catch, который не возвращает значение.
Промисы в JavaScript образуют цепочку, где каждый вызов then или catch создаёт новый промис. Когда в каком-то звене возникает ошибка, управление переходит к ближайшему обработчику catch, пропуская промежуточные then.
Если catch не выбрасывает новую ошибку и не возвращает отклонённый промис, то возвращаемый им промис переходит в состояние fulfilled. Значение, которое он несёт, — это то, что вернул колбэк catch. Если явного return нет, функция возвращает undefined.
Таким образом, следующий then в цепочке получит undefined и выполнится как обычно. Ошибка считается «погашенной».
Promise.reject(new Error('boom'))
.catch(err => {
console.log('поймали:', err.message); // поймали: boom
// ничего не возвращаем
})
.then(value => {
console.log('then получил:', value); // then получил: undefined
});
Если же нужно передать ошибку дальше, в catch следует либо throw err, либо return Promise.reject(err). Тогда следующий then будет пропущен, а управление уйдёт к следующему catch.
Итог: catch без возврата значения превращает ошибку в успешное завершение с undefined, что удобно для сценариев восстановления, но опасно, если ошибку нужно пробросить выше.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию