Cum sa gestionezi erori in JavaScript
In this tutorial, you'll learn about Cum sa gestionezi erori in JavaScript. We cover key concepts, practical examples, and best practices.
Gestionarea erorilor este esentiala pentru aplicatii robuste. Acest ghid iti arata cum sa prinzi, sa arunci si sa creezi erori personalizate in JavaScript.
Quick Fix
1. Blocul try/catch de baza
try/catch prinde exceptiile din codul sincron:
try {
const data = JSON.parse('{"name": "Ion"}');
console.log('Parsare reusita:', data.name);
} catch (error) {
console.error('Eroare la parsare:', error.message);
}
Parsare reusita: Ion
2. Throw pentru a arunca erori
Foloseste throw pentru a semnala situatii exceptionale:
function divide(a, b) {
if (typeof a !== 'number' || typeof b !== 'number') {
throw new TypeError('Ambii parametri trebuie sa fie numere');
}
if (b === 0) {
throw new Error('Impartirea la zero nu este permisa');
}
return a / b;
}
try {
console.log(divide(10, 0));
} catch (error) {
console.error(error.message);
}
Impartirea la zero nu este permisa
3. Erori personalizate
Extinde clasa Error pentru erori specifice:
class ValidationError extends Error {
constructor(field, message) {
super(message);
this.name = 'ValidationError';
this.field = field;
this.timestamp = new Date().toISOString();
}
}
class NetworkError extends Error {
constructor(statusCode, message) {
super(message);
this.name = 'NetworkError';
this.statusCode = statusCode;
}
}
function validateUser(user) {
if (!user.name) {
throw new ValidationError('name', 'Numele este obligatoriu');
}
if (user.age < 0) {
throw new ValidationError('age', 'Varsta nu poate fi negativa');
}
}
try {
validateUser({ name: '', age: -5 });
} catch (error) {
if (error instanceof ValidationError) {
console.error(`Campul "${error.field}": ${error.message}`);
} else {
console.error('Eroare necunoscuta:', error);
}
}
Campul "name": Numele este obligatoriu
4. finally pentru cleanup
finally se executa intotdeauna, indiferent de eroare:
async function fetchData() {
showLoader();
try {
const response = await fetch('/api/data');
if (!response.ok) throw new NetworkError(response.status, 'Esuat');
return await response.json();
} catch (error) {
console.error('Eroare retea:', error.message);
return null;
} finally {
hideLoader(); // Se executa intotdeauna
}
}
5. Prinderea erorilor in async/await
Erorile din functiile async se prind cu try/catch:
async function riskyOperation() {
try {
const result = await Promise.reject(new Error('Operatie esuata'));
return result;
} catch (error) {
console.error('Prins in async:', error.message);
throw error; // Re-arunca daca vrei sa fie prins mai sus
}
}
try {
await riskyOperation();
} catch (error) {
console.error('Prins la nivel superior:', error.message);
}
Prins in async: Operatie esuata
Prins la nivel superior: Operatie esuata
Prevention
- Foloseste erori personalizate pentru diferite tipuri de situatii
- Nu inghiti erorile in tacere -- macar logheaza-le
- Foloseste
finallypentru operatii de cleanup (inchis fisiere, ascuns loadere) - Arunca intotdeauna obiecte Error (nu string-uri sau numere)
Common Mistakes
- A inghiti erorile -- un
catchgol (catch (e) {}) ascunde problemele si face debugging-ul imposibil - A arunca string-uri in loc de obiecte Error --
throw 'eroare'pierde stack trace-ul - A nu trata erori in async -- functiile async care nu au try/catch pot returna Promise-uri respinse neprinse
- A confunda erorile de tip cu validarea -- TypeError si ValidationError sunt lucruri diferite
- A nu propaga erorile corect -- daca nu poti trata o eroare, re-arunca-o pentru ca nivelul superior sa o gestioneze
FAQ
Construit de dezvoltatorii Doda Browser, DodaZIP si Durga Antivirus Pro. Instrumentele DodaTech se integreaza perfect cu JavaScript pentru productivitate si securitate sporite.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro