Как се справяш със ситуацията, когато обещанието завърши с грешка (отказ)?
sobes.tech AI
Отговор от AI
Обработвам с помощта на методите .catch() или .finally().
.catch() се използва за обработка на отхвърлени promises. Ако promise бъде успешно изпълнено, блокът .catch() се игнорира.
// Обработка на грешка с `.catch()`
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed'); // Имитация на грешка
}
return response.json();
})
.then(data => {
console.log('Получени данни:', data);
})
.catch(error => {
console.error('Грешка:', error); // Обработка на грешката тук
});
.finally() се изпълнява независимо дали promise е успешно (fulfill) или с грешка (reject). Полезен е за почистване на ресурси или скриване на индикатори за зареждане.
// Използване на `.finally()` за изпълнение на код след приключване на promise
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed');
}
return response.json();
})
.then(data => {
console.log('Получени данни:', data);
})
.catch(error => {
console.error('Грешка:', error);
})
.finally(() => {
console.log('Заявката е приключила.'); // Този код винаги ще се изпълни
});
Мога също да използвам конструкцията try...catch вътре във async функции за обработка на грешки при асинхронни операции, включително promises:
// Обработка на грешки в async/await с помощта на try...catch
async function fetchData() {
try {
const response = await fetch('/api/data');
if (!response.ok) {
throw new Error('Request failed');
}
const data = await response.json();
console.log('Получени данни:', data);
} catch (error) {
console.error('Грешка:', error); // Обработка на грешката тук
} finally {
console.log('Завършване на операцията fetch.'); // Винаги се изпълнява
}
}
fetchData();
Изборът на метод зависи от контекста и необходимата логика за обработка. .catch() е основната конструкция за реакция на грешки, а .finally() за действия, които се изпълняват независимо от резултата. try...catch в async функции осигурява по-обичайния, синхронен стил на обработка на грешки.