Como é que lidas com a situação em que uma promessa termina com erro (rejeição)?
sobes.tech IA
Resposta da IA
Estou a tratar usando os métodos .catch() ou .finally().
.catch() é usado para tratar promessas rejeitadas. Se a promessa for resolvida com sucesso, o bloco .catch() é ignorado.
// Tratamento de erro com .catch()
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed'); // Simulação de erro
}
return response.json();
})
.then(data => {
console.log('Dados recebidos:', data);
})
.catch(error => {
console.error('Erro:', error); // Tratamento de erro aqui
});
.finally() é executado independentemente de a promessa ser concluída com sucesso (fulfill) ou com erro (reject). É útil para limpar recursos ou esconder indicadores de carregamento.
// Uso de .finally() para executar código após a conclusão da promessa
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed');
}
return response.json();
})
.then(data => {
console.log('Dados recebidos:', data);
})
.catch(error => {
console.error('Erro:', error);
})
.finally(() => {
console.log('Requisição terminada.'); // Este código sempre será executado
});
Posso também usar a construção try...catch dentro de funções async para tratar erros de operações assíncronas, incluindo promessas:
// Tratamento de erro em async/await usando 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('Dados recebidos:', data);
} catch (error) {
console.error('Erro:', error); // Tratamento de erro aqui
} finally {
console.log('Operação de fetch concluída.'); // Sempre executado
}
}
fetchData();
A escolha do método depende do contexto e da lógica de tratamento requerida. .catch() é a estrutura principal para reagir a erros, e .finally() para ações que são executadas independentemente do resultado. try...catch em funções async fornece um estilo de tratamento de erros mais familiar e síncrono.