Middle
Análisis de un ejemplo práctico con Promise: ¿en qué orden se mostrarán los console.log al usar la cadena .then/.catch? ¿Qué sucederá si se elimina el return del catch?
sobes.tech AI
Respuesta de la IA
Рассмотрим цепочку Promise с .then и .catch, например:
Promise.reject('error')
.then(() => console.log('then1'))
.catch(() => {
console.log('catch');
// return; // что если убрать return?
})
.then(() => console.log('then2'));
Порядок вывода будет:
catch
then2
Объяснение:
- Promise сразу отклоняется с ошибкой 'error'.
- Первый .then пропускается, так как промис в состоянии rejected.
- Переходит в .catch, который ловит ошибку и выводит 'catch'.
- Если внутри catch есть return (даже без значения), следующий .then получает resolved промис и выполняется, выводя 'then2'.
Если убрать return из catch, то:
- В JavaScript, если функция в .catch не возвращает значение, она возвращает undefined, что считается resolved значением.
- Поэтому следующий .then всё равно выполнится, и 'then2' выведется.
Итог: убрать return из catch не изменит порядок вывода, так как отсутствие return эквивалентно возврату undefined, что переводит цепочку в resolved состояние.
Если же в catch выбросить ошибку или вернуть отклонённый промис, то следующий then не выполнится.