Junior
Kako rukovodiš situacijom kada obećanje završi sa greškom (odbijanje)?
sobes.tech АИ
Одговор од АИ
Obrađujem pomoću metoda .catch() ili .finally().
.catch() se koristi za obradu odbačenih promise-ova. Ako se promise uspešno reši, blok .catch() se ignoriše.
// Obrada greške pomoću `.catch()`
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed'); // Simulacija greške
}
return response.json();
})
.then(data => {
console.log('Primljeni podaci:', data);
})
.catch(error => {
console.error('Greška:', error); // Obrada greške ovde
});
.finally() se izvršava nezavisno od toga da li je promise uspešno (fulfill) ili je odbijen (reject). Koristan je za čišćenje resursa ili skrivanje indikatora učitavanja.
// Korišćenje `.finally()` za izvršavanje koda nakon završetka promise
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed');
}
return response.json();
})
.then(data => {
console.log('Primljeni podaci:', data);
})
.catch(error => {
console.error('Greška:', error);
})
.finally(() => {
console.log('Zahtev je završen.'); // Ovaj kod će uvek biti izvršen
});
Takođe, mogu koristiti konstrukciju try...catch unutar async funkcija za obradu grešaka asinhronih operacija, uključujući promise-ove:
// Obrada greške u async/await pomoću 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('Primljeni podaci:', data);
} catch (error) {
console.error('Greška:', error); // Obrada greške ovde
} finally {
console.log('Fetch operacija je završena.'); // Uvek se izvršava
}
}
fetchData();
Izbor metode zavisi od konteksta i potrebne logike obrade. .catch() je glavna konstrukcija za reakciju na greške, a .finally() za radnje koje se izvršavaju nezavisno od rezultata. try...catch u async funkcijama pruža poznatiji, sinhroni stil obrade grešaka.