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

Цепочка сразу становится rejected, первый .then пропускается. Первый .catch ловит ошибку Вывод: Catch 1: Ошибка1 Возвращает 'Другое значение', превращая ошибку в успешный результат. Следующий .then получает 'Другое значение' Вывод: Then 2: Другое значение Затем выбрасывает новую ошибку: throw new Error('Вторая ошибка') Цепочка снова становится rejected. Второй .catch ловит вторую ошибку Вывод: Catch 2: Вторая ошибка Ничего не возвращает → результат undefined. Последний .then получает undefined Вывод: Then 3: undefined Примите привет! ("Ошибка!") — это промис, который сразу отклоняется с ошибкой "Ошибка!" .then(1) — пропускается, так как промис в состоянии rejected .catch(1) — перехватывает ошибку, выводит "Catch 1: Ошибка!" и возвращает "ДАННЫЕ ВОЗВРАЩЕНЫ" .then(2) — получает "ДАННЫЕ ВОЗВРАЩЕНЫ", выводит "Тикер ? ДАННЫЕ ВОЗВРАЩЕНЫ" и выбрасывает новую ошибку "Вторая ошибка" .catch(2) — перехватывает вторую ошибку, выводит "Catch 2: Вторая ошибка" .then(3) — получает undefined (так как предыдущий catch ничего не вернул), выводит "then 3: undefined"

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

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

sobes.tech AI

В цепочке промисов, если промис отклонён (rejected), первый .then пропускается, и управление переходит к ближайшему .catch.

  • Первый .catch ловит ошибку, выводит сообщение и возвращает значение, превращая ошибку в успешный результат.
  • Следующий .then получает это значение, выводит его и выбрасывает новую ошибку.
  • Второй .catch ловит новую ошибку, выводит сообщение, но ничего не возвращает, поэтому результатом становится undefined.
  • Последний .then получает undefined и выводит его.

Пример:

Promise.reject('Ошибка!')
  .then(() => console.log('Этот then пропускается'))
  .catch(err => {
    console.log('Catch 1:', err); // Catch 1: Ошибка!
    return 'Другое значение';
  })
  .then(value => {
    console.log('Then 2:', value); // Then 2: Другое значение
    throw new Error('Вторая ошибка');
  })
  .catch(err => {
    console.log('Catch 2:', err.message); // Catch 2: Вторая ошибка
  })
  .then(value => {
    console.log('Then 3:', value); // Then 3: undefined
  });

Таким образом, .catch может преобразовать ошибку в успешный результат, позволяя цепочке продолжаться, а если ошибка выбрасывается снова, цепочка снова становится отклонённой.