Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Помилки та їх обробка». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Обробка помилок у JavaScript** базується на `try...catch...finally` та `throw` для синхронного коду, а для асинхронного - на `try...catch` навколо `async/await` або `.catch()` для промісів. **Ключове:** глобальні обробники (`window.onerror`, `process.on('uncaughtException')`) - це страхування, а не заміна локальної обробки.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Базова обробка: `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); // вирішіть: логувати і завершувати/продовжувати за політикою застосунку }); ``` > Глобальні хендлери - це страхування, а не заміна локальної обробки.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.