Skip to content

Cum sa gestionezi erori in JavaScript

DodaTech Updated 2025-01-15 3 min read

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 finally pentru operatii de cleanup (inchis fisiere, ascuns loadere)
  • Arunca intotdeauna obiecte Error (nu string-uri sau numere)

Common Mistakes

  1. A inghiti erorile -- un catch gol (catch (e) {}) ascunde problemele si face debugging-ul imposibil
  2. A arunca string-uri in loc de obiecte Error -- throw 'eroare' pierde stack trace-ul
  3. A nu trata erori in async -- functiile async care nu au try/catch pot returna Promise-uri respinse neprinse
  4. A confunda erorile de tip cu validarea -- TypeError si ValidationError sunt lucruri diferite
  5. A nu propaga erorile corect -- daca nu poti trata o eroare, re-arunca-o pentru ca nivelul superior sa o gestioneze

FAQ

### Ce tipuri de erori incorporate exista in JavaScript?

Principalele: Error, TypeError, ReferenceError, SyntaxError, RangeError, URIError. Fiecare corespunde unui tip specific de eroare.

Cum creez o eroare personalizata?

Extinde clasa Error: class MyError extends Error { constructor(message) { super(message); this.name = 'MyError'; } }. Poti adauga proprietati suplimentare.

Este obligatoriu sa prind orice eroare?

Nu, dar este o buna practica. Erorile neprinse in functii async cauzeaza "unhandled promise rejection", iar cele sincrone opresc executia scriptului.

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