Middle
Łańcuch natychmiast staje się odrzucony, pierwszy .then jest pomijany. Pierwszy .catch przechwytuje błąd Wynik: Catch 1: Błąd1 Zwraca 'Inną wartość', zamieniając błąd na wynik pomyślny. Następny .then otrzymuje 'Inną wartość' Wynik: Then 2: Inna wartość Następnie rzuca nowy błąd: throw new Error('Drugi błąd') Łańcuch ponownie staje się odrzucony. Drugi .catch przechwytuje drugi błąd Wynik: Catch 2: Drugi błąd Nie zwraca nic → wynik undefined. Ostatni .then otrzymuje undefined Wynik: Then 3: undefined Przyjmij pozdrowienia! ("Błąd!") — to obietnica, która od razu odrzuca się błędem "Błąd!" .then(1) — jest pomijany, ponieważ obietnica jest w stanie odrzuconym .catch(1) — przechwytuje błąd, wyświetla "Catch 1: Błąd!" i zwraca "DANE ZWRÓCONE" .then(2) — otrzymuje "DANE ZWRÓCONE", wyświetla "Tiker? DANE ZWRÓCONE" i rzuca nowy błąd "Drugi błąd" .catch(2) — przechwytuje drugi błąd, wyświetla "Catch 2: Drugi błąd" .then(3) — otrzymuje undefined (ponieważ poprzedni catch nic nie zwrócił), wyświetla "then 3: undefined"
sobes.tech AI
Odpowiedź 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 может преобразовать ошибку в успешный результат, позволяя цепочке продолжаться, а если ошибка выбрасывается снова, цепочка снова становится отклонённой.