Sobes.tech
Junior

Jak zvládáš situaci, když slib skončí chybou (odmítnutí)?

sobes.tech AI

Odpověď od AI

Zpracovávám pomocí metod .catch() nebo .finally().

.catch() se používá k ošetření zamítnutých promise. Pokud je promise úspěšně vyřešena, blok .catch() je ignorován.

// Ošetření chyby pomocí `.catch()`
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed'); // Simulace chyby
    }
    return response.json();
  })
  .then(data => {
    console.log('Přijatá data:', data);
  })
  .catch(error => {
    console.error('Chyba:', error); // Ošetření chyby zde
  });

.finally() se vykoná bez ohledu na to, zda promise byla úspěšná (fulfill) nebo zamítnutá (reject). Je užitečné pro čištění zdrojů nebo skrytí indikátorů načítání.

// Použití `.finally()` pro spuštění kódu po dokončení promise
fetch('/api/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Request failed');
    }
    return response.json();
  })
  .then(data => {
    console.log('Přijatá data:', data);
  })
  .catch(error => {
    console.error('Chyba:', error);
  })
  .finally(() => {
    console.log('Požadavek dokončen.'); // Tento kód se vždy spustí
  });

Také mohu použít konstrukci try...catch uvnitř async funkcí k ošetření chyb asynchronních operací, včetně promise:

// Ošetření chyby v async/await pomocí 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('Přijatá data:', data);
  } catch (error) {
    console.error('Chyba:', error); // Ošetření chyby zde
  } finally {
    console.log('Operace fetch byla dokončena.'); // Vždy se provede
  }
}

fetchData();

Volba metody závisí na kontextu a požadované logice zpracování. .catch() je hlavní konstrukce pro reakci na chyby, zatímco .finally() pro akce, které se provedou bez ohledu na výsledek. try...catch v async funkcích poskytuje známější, synchronní styl zpracování chyb.