Sobes.tech
Middle

La chaîne devient immédiatement rejetée, le premier .then est ignoré. Le premier .catch attrape l'erreur Sortie: Catch 1 : Erreur1 Renvoie 'Autre valeur', transformant l'erreur en un résultat réussi. Le .then suivant reçoit 'Autre valeur' Sortie: Then 2 : Autre valeur Puis lance une nouvelle erreur : throw new Error('Deuxième erreur') La chaîne devient à nouveau rejetée. Le second .catch attrape la deuxième erreur Sortie: Catch 2 : Deuxième erreur Ne retourne rien → résultat undefined. Le dernier .then reçoit undefined Sortie: Then 3 : undefined Recevez un salut ! ("Erreur!") — c'est une promesse qui est immédiatement rejetée avec l'erreur "Erreur!" .then(1) — est ignoré, car la promesse est en état rejeté .catch(1) — intercepte l'erreur, affiche "Catch 1 : Erreur!" et retourne "DONNÉES RETOURNÉES" .then(2) — reçoit "DONNÉES RETOURNÉES", affiche "Tic ? DONNÉES RETOURNÉES" et lance une nouvelle erreur "Deuxième erreur" .catch(2) — intercepte la deuxième erreur, affiche "Catch 2 : Deuxième erreur" .then(3) — reçoit undefined (car le catch précédent n'a rien retourné), affiche "then 3 : undefined"

sobes.tech IA

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