Помилки та їх обробка
Базова обробка: try...catch...finally і throw
javascript
try {
risky(); // код, який може впасти
} catch (err) {
console.error(err.message); // обробка/логування
} finally {
cleanup(); // виконується завжди (навіть за помилки)
}Генерація помилки:
javascript
if (!user) {
throw new Error('User not found');
}Кастомні помилки
javascript
class ValidationError extends Error {
constructor(message, cause) {
super(message, { cause }); // Node 16+/сучасні браузери: err.cause
this.name = 'ValidationError';
}
}
throw new ValidationError('Invalid email');2) Асинхронний код
a) async/await + try...catch
javascript
async function load() {
try {
const res = await fetch('/api/data');
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return await res.json();
} catch (err) {
// обробка/повторна спроба/сповіщення
console.error('Load failed:', err);
return null; // або прокинути далі: throw err
}
}b) Проміси: .catch()
javascript
fetch('/api/data')
.then(r => r.json())
.catch(err => console.error('Request failed', err));c) Паралельні операції без падіння всього батчу
javascript
const results = await Promise.allSettled(urls.map(u => fetch(u)));
for (const r of results) {
if (r.status === 'fulfilled') console.log('OK', r.value);
else console.warn('Failed', r.reason);
}3) Глобальні перехоплювачі (остання лінія оборони)
Браузер
javascript
// синхронні/непіймані винятки
window.addEventListener('error', (event) => {
console.error('Uncaught error:', event.error, event.message, event.filename, event.lineno);
});
// непіймані відхилення промісів
window.addEventListener('unhandledrejection', (event) => {
console.error('Unhandled rejection:', event.reason);
});Node.js
javascript
process.on('uncaughtException', (err) => {
console.error('Uncaught Exception', err);
// логування + коректне завершення процесу
process.exit(1);
});
process.on('unhandledRejection', (reason) => {
console.error('Unhandled Rejection', reason);
// вирішіть: логувати і завершувати/продовжувати за політикою застосунку
});Глобальні хендлери - це страхування, а не заміна локальної обробки.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.