JavaScript:
Обробка помилок
Як це зробити:
Ось класичний блок try-catch
:
try {
// Код, який може викликати помилку
let result = potentiallyRiskyOperation();
console.log('Успіх:', result);
} catch (error) {
// Що робити, якщо виникла помилка
console.error('Ой:', error.message);
}
Приклад виводу, коли помилки не відбувається:
Успіх: 42
І коли сталася помилка:
Ой: Щось пішло не так
Для асинхронного коду, де використовуються проміси, використовуйте try-catch
у функції async
:
async function fetchData() {
try {
let data = await fetch('https://api.example.com/data');
console.log('Дані отримано:', data);
} catch (error) {
console.error('Помилка отримання даних:', error.message);
}
}
fetchData();
Детальніше
Обробка помилок у JavaScript розвивалася. Колись (ES3, приблизно 1999 рік) у нас був лише блок try-catch
. Не дуже гнучкий, але виконував свою роботу.
ES6 (2015) ввів проміси і надав нам .then()
та .catch()
, що дозволили нам більш елегантно обробляти асинхронні помилки.
fetch('https://api.example.com/data')
.then(data => console.log('Дані отримано:', data))
.catch(error => console.error('Помилка отримання даних:', error.message));
Що стосується деталей реалізації, коли помилка викидається, движки JavaScript створюють об’єкт Error
з корисними властивостями, такими як message
та stack
. Ви також можете створювати свої типи помилок, розширюючи клас Error
– зручно для більш складних додатків.
Альтернативи? Можна ігнорувати обробку помилок (погана ідея), використовувати функції зворотного виклику з параметрами, що містять помилку на першому місці (привіт, стиль Node.js), або використовувати більш витончені бібліотеки та фреймворки, які пропонують своє бачення.
Дивіться також
Більше про обробку помилок:
- MDN про try-catch: MDN try…catch
- Async/Await: MDN async function
- Посібник щодо Промісів: MDN Promises
- Створення та кидання налаштованих помилок: MDN Error