Sobes.tech
Junior

Hogyan kezeled azt a helyzetet, amikor egy ígéret hibával (elutasítással) zárul?

sobes.tech MI

Válasz az MI-től

A .catch() vagy .finally() módszerekkel kezelem.

A .catch() a elutasított promise-ok kezelésére szolgál. Ha a promise sikeresen teljesül, a .catch() blokk figyelmen kívül marad.

// Hiba kezelése `.catch()`-tel
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Hiba szimulálása
    }
    return response.json();
  })
  .then(data => {
    console.log('Kapott adatok:', data);
  })
  .catch(error => {
    console.error('Hiba:', error); // Hiba kezelése itt
  });

A .finally() akkor fut le, függetlenül attól, hogy a promise sikeresen (fulfill) vagy hibával (reject) zárult-e. Hasznos erőforrások tisztítására vagy betöltési indikátorok elrejtésére.

// A `.finally()` használata a promise befejezése utáni kód végrehajtására
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Kapott adatok:', data);
  })
  .catch(error => {
    console.error('Hiba:', error);
  })
  .finally(() => {
    console.log('Kérés befejeződött.'); // Ez a kód mindig lefut
  });

Emellett a try...catch szerkezetet is használhatom async függvényeken belül az aszinkron műveletek, így a promise-ok hibáinak kezelésére:

// Hibakezelés async/await és try...catch segítségével
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('Kapott adatok:', data);
  } catch (error) {
    console.error('Hiba:', error); // Hibakezelés itt
  } finally {
    console.log('Fetch művelet befejeződött.'); // Mindig lefut
  }
}

fetchData();

A módszer kiválasztása a kontextustól és a szükséges hibakezelési logikától függ. A .catch() a fő szerkezet a hibák kezelésére, míg a .finally() olyan műveletekhez való, amelyek függetlenek az eredménytől. A try...catch az async függvényekben egy ismerős, szinkron stílusú hibakezelést biztosít.