Middle
Reťazec sa okamžite stáva rejected, prvý .then je preskočený. Prvý .catch zachytí chybu Výstup: Catch 1: Chyba1 Vráti 'Inú hodnotu', čím zmení chybu na úspešný výsledok. Nasledujúci .then prijme 'Inú hodnotu' Výstup: Then 2: Iná hodnota Potom vyhodí novú chybu: throw new Error('Druhá chyba') Reťazec sa opäť stáva rejected. Druhý .catch zachytí druhú chybu Výstup: Catch 2: Druhá chyba Nič nevracia → výsledok je undefined. Posledný .then prijme undefined Výstup: Then 3: undefined Prijmite pozdrav! ("Chyba!") — je to sľub, ktorý sa okamžite odmietne s chybou "Chyba!" .then(1) — je preskočený, pretože sľub je v rejected stave .catch(1) — zachytí chybu, zobrazí "Catch 1: Chyba!" a vráti "DÁTA VRÁTENÉ" .then(2) — prijme "DÁTA VRÁTENÉ", zobrazí "Tiker? DÁTA VRÁTENÉ" a hodí novú chybu "Druhá chyba" .catch(2) — zachytí druhú chybu, zobrazí "Catch 2: Druhá chyba" .then(3) — prijme undefined (pretože predchádzajúci catch nič nevrátil), zobrazí "then 3: undefined"
sobes.tech AI
Odpoveď od 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 может преобразовать ошибку в успешный результат, позволяя цепочке продолжаться, а если ошибка выбрасывается снова, цепочка снова становится отклонённой.