Sobes.tech
Junior

Kuidas sa käitud olukorras, kui lubadus lõpeb veaga (tagasilükkamine)?

sobes.tech AI

Vastus AI-lt

Tegevus, kasutades .catch() või .finally() meetodeid.

.catch() kasutatakse lubaduste (promise) tagasi lükkamise korral. Kui lubadus õnnestub, siis .catch() plokk jäetakse vahele.

// Vea töötlemine `.catch()` abil
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Näiv error
    }
    return response.json();
  })
  .then(data => {
    console.log('Saadud andmed:', data);
  })
  .catch(error => {
    console.error('Viga:', error); // Vea töötlemine
  });

.finally() käivitatakse sõltumata sellest, kas lubadus täidetakse (fulfill) või lükatakse tagasi (reject). See on kasulik ressursside puhastamiseks või laadimisindikaatorite peitmiseks.

// Kasutades `.finally()` koodi pärast lubaduse lõpetamist
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Saadud andmed:', data);
  })
  .catch(error => {
    console.error('Viga:', error);
  })
  .finally(() => {
    console.log('Päring lõpetatud.'); // See kood käivitatakse alati
  });

Samuti võin kasutada try...catch struktuuri async funktsioonide sees, et töödelda asünkroonsete operatsioonide vigu:

// Vea töötlemine `async/await` ja `try...catch` abil
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('Saadud andmed:', data);
  } catch (error) {
    console.error('Viga:', error); // Vea töötlemine
  } finally {
    console.log('Päringute operatsioon lõppes.'); // Alati käivitatakse
  }
}

fetchData();

Valik sõltub kontekstist ja nõutavast töötlusloogikast. .catch() on peamine konstruktsioon vigade reageerimiseks, samas kui .finally() on mõeldud tegevustele, mis tuleb teha sõltumata tulemusest. try...catch async funktsioonides võimaldab rohkem tavalist sünkroonset veakäsitlusstiili.