Cum gestionezi situația în care o promisiune se încheie cu o eroare (rejected)?
sobes.tech AI
Răspuns de la AI
Procesez folosind metodele .catch() sau .finally().
.catch() este folosit pentru a trata promisiunile respinse. Dacă promisiunea se rezolvă cu succes, blocul .catch() este ignorat.
// Tratarea erorilor cu `.catch()`
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed'); // Simulare de eroare
}
return response.json();
})
.then(data => {
console.log('Date primite:', data);
})
.catch(error => {
console.error('Eroare:', error); // Tratarea erorii aici
});
.finally() se execută indiferent dacă promisiunea s-a rezolvat cu succes (fulfill) sau cu eroare (reject). Este util pentru curățarea resurselor sau ascunderea indicatorilor de încărcare.
// Utilizarea `.finally()` pentru a executa cod după finalizarea promisiunii
fetch('/api/data')
.then(response => {
if (!response.ok) {
throw new Error('Request failed');
}
return response.json();
})
.then(data => {
console.log('Date primite:', data);
})
.catch(error => {
console.error('Eroare:', error);
})
.finally(() => {
console.log('Cererea s-a terminat.'); // Acest cod va fi întotdeauna executat
});
De asemenea, pot folosi construcția try...catch în interiorul funcțiilor async pentru a trata erorile operațiilor asincrone, inclusiv promisiunile:
// Tratarea erorilor în async/await cu 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('Date primite:', data);
} catch (error) {
console.error('Eroare:', error); // Tratarea erorii aici
} finally {
console.log('Operația de fetch s-a încheiat.'); // Se execută întotdeauna
}
}
fetchData();
Alegerea metodei depinde de context și de logica de tratare necesară. .catch() este construcția principală pentru reacția la erori, iar .finally() pentru acțiuni efectuate independent de rezultat. try...catch în funcțiile async oferă un stil de tratare a erorilor mai familiar și sincron.