Как ты обрабатываешь ситуацию, когда промис завершится с ошибкой (reject)?
AI答案
sobes.tech AI
Обрабатываю с помощью методов .catch() или .finally().
.catch() используется для обработки отклоненных промисов. Если промис успешно выполняется, блок .catch() игнорируется.
// Обработка ошибки с помощью .catch()
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed'); // Имитация ошибки
}
return response.json();
})
.then(data => {
console.log('Data received:', data);
})
.catch(error => {
console.error('Error:', error); // Обработка ошибки здесь
});
.finally() выполняется независимо от того, завершился промис успешно (fulfill) или с ошибкой (reject). Он полезен для очистки ресурсов или скрытия индикаторов загрузки.
// Использование .finally() для выполнения кода после завершения промиса
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed');
}
return response.json();
})
.then(data => {
console.log('Data received:', data);
})
.catch(error => {
console.error('Error:', error);
})
.finally(() => {
console.log('Request finished.'); // Этот код выполнится всегда
});
Также могу использовать конструкцию try...catch внутри async функции для обработки ошибок асинхронных операций, включая промисы:
// Обработка ошибки в 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 received:', data);
} catch (error) {
console.error('Error:', error); // Обработка ошибки здесь
} finally {
console.log('Fetch operation finished.'); // Выполняется всегда
}
}
fetchData();
Выбор метода зависит от контекста и требуемой логики обработки. .catch() - основная конструкция для реакции на ошибки, а .finally() - для действий, выполняемых независимо от результата. try...catch в async функциях обеспечивает более привычный синхронный стиль обработки ошибок.