Sobes.tech
Junior

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.