Sobes.tech
Junior

Kā tu rīkojies situācijā, kad solījums beidzas ar kļūdu (atteikšanos)?

sobes.tech AI

Atbilde no AI

Darbo ar izmanto .catch() vai .finally() metodes.

.catch() tiek izmantots, lai apstrādātu atteiktus solījumus. Ja solījums veiksmīgi izpildās, .catch() bloks tiek ignorēts.

// Kļūdas apstrāde ar `.catch()`
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Imitē kļūdu
    }
    return response.json();
  })
  .then(data => {
    console.log('Saņemtie dati:', data);
  })
  .catch(error => {
    console.error('Kļūda:', error); // Kļūdas apstrāde
  });

.finally() tiek izpildīts neatkarīgi no tā, vai solījums ir izpildīts veiksmīgi (fulfill) vai noraidīts (reject). Tas ir noderīgi resursu tīrīšanai vai ielādes indikatoru slēpšanai.

// Izmantojot `.finally()` kodam pēc solījuma pabeigšanas
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Saņemtie dati:', data);
  })
  .catch(error => {
    console.error('Kļūda:', error);
  })
  .finally(() => {
    console.log('Pieprasījums pabeigts.'); // Šis kods vienmēr tiks izpildīts
  });

Tāpat var izmantot try...catch struktūru async funkcijās, lai apstrādātu kļūdas asinhronajās operācijās:

// Kļūdas apstrāde ar `async/await` un `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('Saņemtie dati:', data);
  } catch (error) {
    console.error('Kļūda:', error); // Kļūdas apstrāde
  } finally {
    console.log('Ielādes operācija pabeigta.'); // Vienmēr izpildās
  }
}

fetchData();

Izvēle ir atkarīga no konteksta un nepieciešamās apstrādes loģikas. .catch() ir galvenā konstrukcija kļūdu reakcijai, bet .finally() ir paredzēts darbībām, kas jāveic neatkarīgi no rezultāta. try...catch async funkcijās nodrošina vairāk tradicionālu sinhronisku kļūdu apstrādes stilu.