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.