Sobes.tech
Junior

Kako rukovodiš situacijom kada obećanje završi sa greškom (odbijanje)?

sobes.tech АИ

Одговор од АИ

Obrađujem pomoću metoda .catch() ili .finally().

.catch() se koristi za obradu odbačenih promise-ova. Ako se promise uspešno reši, blok .catch() se ignoriše.

// Obrada greške pomoću `.catch()`
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Simulacija greške
    }
    return response.json();
  })
  .then(data => {
    console.log('Primljeni podaci:', data);
  })
  .catch(error => {
    console.error('Greška:', error); // Obrada greške ovde
  });

.finally() se izvršava nezavisno od toga da li je promise uspešno (fulfill) ili je odbijen (reject). Koristan je za čišćenje resursa ili skrivanje indikatora učitavanja.

// Korišćenje `.finally()` za izvršavanje koda nakon završetka promise
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Primljeni podaci:', data);
  })
  .catch(error => {
    console.error('Greška:', error);
  })
  .finally(() => {
    console.log('Zahtev je završen.'); // Ovaj kod će uvek biti izvršen
  });

Takođe, mogu koristiti konstrukciju try...catch unutar async funkcija za obradu grešaka asinhronih operacija, uključujući promise-ove:

// Obrada greške u async/await pomoću 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('Primljeni podaci:', data);
  } catch (error) {
    console.error('Greška:', error); // Obrada greške ovde
  } finally {
    console.log('Fetch operacija je završena.'); // Uvek se izvršava
  }
}

fetchData();

Izbor metode zavisi od konteksta i potrebne logike obrade. .catch() je glavna konstrukcija za reakciju na greške, a .finally() za radnje koje se izvršavaju nezavisno od rezultata. try...catch u async funkcijama pruža poznatiji, sinhroni stil obrade grešaka.