Sobes.tech
Middle

A cadeia torna-se imediatamente rejeitada, o primeiro .then é ignorado. O primeiro .catch captura o erro Saída: Catch 1: Erro1 Devolve 'Outro valor', transformando o erro numa resultado bem-sucedido. O próximo .then recebe 'Outro valor' Saída: Then 2: Outro valor Depois lança um novo erro: throw new Error('Segundo erro') A cadeia fica novamente rejeitada. O segundo .catch captura o segundo erro Saída: Catch 2: Segundo erro Não devolve nada → resultado undefined. O último .then recebe undefined Saída: Then 3: undefined Recebe uma saudação! ("Erro!") — é uma promessa que é rejeitada imediatamente com o erro "Erro!" .then(1) — é ignorado, pois a promessa está em estado rejeitado .catch(1) — captura o erro, exibe "Catch 1: Erro!" e devolve "DADOS DEVOLVIDOS" .then(2) — recebe "DADOS DEVOLVIDOS", exibe "Tic ? DADOS DEVOLVIDOS" e lança um novo erro "Segundo erro" .catch(2) — captura o segundo erro, exibe "Catch 2: Segundo erro" .then(3) — recebe undefined (pois o catch anterior não devolveu nada), exibe "then 3: undefined"

sobes.tech IA

Resposta da IA

В цепочке промисов, если промис отклонён (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 может преобразовать ошибку в успешный результат, позволяя цепочке продолжаться, а если ошибка выбрасывается снова, цепочка снова становится отклонённой.