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.