Розширення Error для доменних помилок застосунку:
class HttpError extends Error {
constructor(statusCode, message) {
super(message);
this.name = 'HttpError';
this.statusCode = statusCode;
}
toString() { return `HTTP ${this.statusCode}: ${this.message}`; }
}
console.log(new HttpError(404, 'Not Found').toString());
console.log(new HttpError(500, 'Server Error').toString());
class DatabaseError extends Error {
constructor(query, message) {
super(message);
this.name = 'DatabaseError';
this.query = query;
}
}
class ConnectionError extends DatabaseError {
constructor(host) {
super(null, `Не вдалось підключитись до ${host}`);
this.name = 'ConnectionError';
this.host = host;
}
}
const dbErr = new DatabaseError('SELECT *', 'Синтаксична помилка');
const connErr = new ConnectionError('localhost');
console.log(dbErr instanceof DatabaseError);
console.log(connErr instanceof DatabaseError);
console.log(connErr instanceof ConnectionError);
const ok = value => ({ success: true, value });
const err = error => ({ success: false, error });
function safeDivide(a, b) {
if (b === 0) return err('Ділення на нуль');
return ok(a / b);
}
function safeParseInt(str) {
const n = parseInt(str);
if (isNaN(n)) return err('Не число');
return ok(n);
}
const results = [safeDivide(10,2), safeDivide(5,0), safeParseInt('42'), safeParseInt('abc')];
results.forEach(r => {
if (r.success) console.log('OK:', r.value);
else console.log('ERR:', r.error);
});