Middle
Занжир дарҳол рад мешавад, аввалин .then унутулуп калат. Аввалин .catch хато ёфтанро мепайвандад Натиҷа: Catch 1: Хатои1 Мебарорад 'Дигар арзиш', хато ба муваффақиятӣ табдил медиҳад. Баъдии .then 'Дигар арзиш' мегирад Натиҷа: Then 2: Дигар арзиш Пас як хато меандозад: throw new Error('Дуюм хато') Занжир боз рад мешавад. Дуюм .catch дуюм хато мегирад Натиҷа: Catch 2: Дуюм хато Ҳеҷ чиз намегардонад → натиҷа undefined. Сохтани охирин .then undefined мегирад Натиҷа: Then 3: undefined Салом! ("Хатои!") — ин ваъда аст, ки фавран бо хато "Хатои!" рад мешавад. .then(1) — гузаронида мешавад, зеро ваъда дар ҳолати rejected аст .catch(1) — хато мегирад, нишон медиҳад "Catch 1: Хатои!" ва "МУДДАТҲО ВОЗГАРТАНД" меорад .then(2) — мегирад "МУДДАТҲО ВОЗГАРТАНД", нишон медиҳад "Тикер? МУДДАТҲО ВОЗГАРТАНД" ва хатои навро меандозад "Дуюм хато" .catch(2) — дуюм хато мегирад, нишон медиҳад "Catch 2: Дуюм хато" .then(3) — мегирад undefined (зеро catch-и қаблӣ чизе нагуфтааст), нишон медиҳад "then 3: undefined"
sobes.tech AI
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 может преобразовать ошибку в успешный результат, позволяя цепочке продолжаться, а если ошибка выбрасывается снова, цепочка снова становится отклонённой.