Sobes.tech
Junior

Kaip tvarkote situaciją, kai pažadas baigiasi klaida (atmetimas)?

sobes.tech AI

Atsakymas iš AI

Veiksmų apdorojimas naudojant .catch() arba .finally().

.catch() naudojamas apdoroti atmetamus pažadus. Jei pažadas sėkmingai įvykdomas, .catch() blokas praleidžiamas.

// Klaidos apdorojimas naudojant `.catch()`
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Pavyzdinė klaida
    }
    return response.json();
  })
  .then(data => {
    console.log('Gauta data:', data);
  })
  .catch(error => {
    console.error('Klaida:', error); // Klaidos apdorojimas
  });

.finally() vykdomas nepriklausomai nuo to, ar pažadas sėkmingai įvykdytas (fulfill), ar atmestas (reject). Jis naudingas išteklių valymui arba įkėlimo indikatorių paslėpimui.

// Naudojant `.finally()` kodui vykdyti po pažado pabaigos
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Gauta data:', data);
  })
  .catch(error => {
    console.error('Klaida:', error);
  })
  .finally(() => {
    console.log('Užklausa baigta.'); // Šis kodas visada vykdomas
  });

Taip pat galiu naudoti try...catch struktūrą asinchroninėse funkcijose apdoroti klaidas:

// Klaidos apdorojimas naudojant `async/await` su `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('Gauta data:', data);
  } catch (error) {
    console.error('Klaida:', error); // Klaidos apdorojimas
  } finally {
    console.log('Užklausos pabaiga.'); // Visada vykdomas
  }
}

fetchData();

Pasirinkimas priklauso nuo konteksto ir reikalaujamos apdorojimo logikos. .catch() yra pagrindinė klaidų reakcijos konstrukcija, o .finally() – veiksmai, vykdomi nepriklausomai nuo rezultato. try...catch asinchroninėse funkcijose suteikia labiau įprastą sinchroninio klaidų apdorojimo stilių.