Middle
Lanac odmah postaje rejected, prvi .then se preskače. Prvi .catch hvata grešku Izlaz: Catch 1: Greška1 Vraća 'Drugu vrednost', pretvarajući grešku u uspešan rezultat. Sledeći .then prima 'Drugu vrednost' Izlaz: Then 2: Druga vrednost Zatim baca novu grešku: throw new Error('Druga greška') Lanac ponovo postaje rejected. Drugi .catch hvata drugu grešku Izlaz: Catch 2: Druga greška Ne vraća ništa → rezultat je undefined. Poslednji .then prima undefined Izlaz: Then 3: undefined Primi pozdrav! ("Greška!") — ovo je obećanje koje se odmah odbacuje sa greškom "Greška!" .then(1) — se preskače, jer je obećanje u rejected stanju .catch(1) — hvata grešku, prikazuje "Catch 1: Greška!" i vraća "PODACI VRAĆENI" .then(2) — prima "PODACI VRAĆENI", prikazuje "Tiker? PODACI VRAĆENI" i baca novu grešku "Druga greška" .catch(2) — hvata drugu grešku, prikazuje "Catch 2: Druga greška" .then(3) — prima undefined (jer prethodni catch ništa nije vratio), prikazuje "then 3: undefined"
sobes.tech АИ
Одговор од АИ
В цепочке промисов, если промис отклонён (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 может преобразовать ошибку в успешный результат, позволяя цепочке продолжаться, а если ошибка выбрасывается снова, цепочка снова становится отклонённой.