Come gestisci la situazione quando una promessa si conclude con un errore (rifiuto)?
sobes.tech AI
Risposta dell'AI
Gestisco usando i metodi .catch() o .finally().
.catch() viene utilizzato per gestire le promesse rifiutate. Se la promessa viene risolta con successo, il blocco .catch() viene ignorato.
// Gestione degli errori con `.catch()`
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed'); // Simulazione di errore
}
return response.json();
})
.then(data => {
console.log('Dati ricevuti:', data);
})
.catch(error => {
console.error('Errore:', error); // Gestione dell'errore qui
});
.finally() viene eseguito indipendentemente dal successo o dal fallimento della promessa. È utile per pulire risorse o nascondere indicatori di caricamento.
// Uso di `.finally()` per eseguire codice dopo il completamento della promessa
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed');
}
return response.json();
})
.then(data => {
console.log('Dati ricevuti:', data);
})
.catch(error => {
console.error('Errore:', error);
})
.finally(() => {
console.log('Richiesta terminata.'); // Questo codice verrà sempre eseguito
});
Posso anche usare la costruzione try...catch all'interno di funzioni async per gestire gli errori delle operazioni asincrone, inclusi i promise:
// Gestione degli errori in async/await con 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('Dati ricevuti:', data);
} catch (error) {
console.error('Errore:', error); // Gestione dell'errore qui
} finally {
console.log('Operazione di fetch terminata.'); // Viene sempre eseguito
}
}
fetchData();
La scelta del metodo dipende dal contesto e dalla logica di gestione richiesta. .catch() è la principale struttura per reagire agli errori, mentre .finally() per azioni eseguite indipendentemente dal risultato. try...catch nelle funzioni async fornisce uno stile di gestione degli errori più familiare e sincrono.