Własna klasa błędu

Wyjątki i walidacja - JavaScript od podstaw: konsola (JavaScript)

Błąd to obiekt, więc można dziedziczyć po `Error`. `ValidationError` dokłada pole `field` (które pole formularza jest złe) i własną nazwę. W `catch` instrukcja `instanceof` rozróżnia rodzaje błędów: złe dane użytkownika pokazujemy spokojnie, a każdy inny błąd (np. pomyłkę w programie) rzucamy dalej (`throw e`), żeby nie zginął.

class ValidationError extends Error {
  constructor(field, message) {
    super(message);
    this.name = 'ValidationError';
    this.field = field;
  }
}
function validateProduct(p) {
  if (typeof p.name !== 'string' || p.name.trim() === '') {
    throw new ValidationError('name', 'nazwa jest wymagana');
  }
  if (!(p.price > 0)) throw new ValidationError('price', 'cena musi być dodatnia');
  return true;
}

const products = [{ name: 'Zeszyt', price: 4.5 }, { name: '', price: 3 }, { name: 'Pióro', price: -2 }, null];
for (const p of products) {
  try {
    validateProduct(p);
    console.log('OK:', p.name);
  } catch (e) {
    if (e instanceof ValidationError) {
      console.log(`Pole ${e.field}: ${e.message}`);
    } else {
      console.log('Inny błąd (', e.name, ') - w prawdziwym programie: throw e');
    }
  }
}

Ładowanie interaktywnego edytora... Jeśli się nie pojawi, włącz JavaScript.

Wszystkie lekcje kursu JavaScript od podstaw: konsola·Zaloguj się, aby zapisać postęp na koncie.