Ako zvládaš situáciu, keď sľub skončí s chybou (odmietnutím)?
sobes.tech AI
Odpoveď od AI
Spracovávam pomocou metód .catch() alebo .finally().
.catch() sa používa na spracovanie zamietnutých promise-ov. Ak sa promise úspešne vyrieši, blok .catch() sa ignoruje.
// Spracovanie chyby pomocou `.catch()`
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed'); // Simulácia chyby
}
return response.json();
})
.then(data => {
console.log('Prijaté údaje:', data);
})
.catch(error => {
console.error('Chyba:', error); // Spracovanie chyby tu
});
.finally() sa vykoná bez ohľadu na to, či promise bola úspešná (fulfill) alebo zlyhala (reject). Je užitočné na vyčistenie zdrojov alebo skrytie indikátorov načítania.
// Použitie `.finally()` na vykonanie 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('Prijaté údaje:', data);
})
.catch(error => {
console.error('Chyba:', error);
})
.finally(() => {
console.log('Žiadosť bola ukončená.'); // Tento kód sa vždy vykoná
});
Tiež môžem použiť konštrukciu try...catch v rámci async funkcií na spracovanie chýb asynchrónnych operácií, vrátane promise:
// Spracovanie chyby v async/await pomocou 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('Prijaté údaje:', data);
} catch (error) {
console.error('Chyba:', error); // Spracovanie chyby tu
} finally {
console.log('Operácia fetch bola ukončená.'); // Vždy sa vykoná
}
}
fetchData();
Výber metódy závisí od kontextu a požadovanej logiky spracovania. .catch() je hlavná konštrukcia na reakciu na chyby, zatiaľ čo .finally() na akcie, ktoré sa vykonajú bez ohľadu na výsledok. try...catch v async funkciách poskytuje známejší, synchronný štýl spracovania chýb.