Sobes.tech
Назад к вопросам
Middle
2

Разбор практического примера с Promise: в каком порядке будут выводиться console.log при использовании цепочки .then/.catch? Что произойдёт если убрать return из catch?

Компании, где спрашивали
AstonAston

Ответ от нейросети

sobes.tech AI

Рассмотрим цепочку 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 не выполнится.