https://www.coltsteele.com/tips/javascript-error-handling-with-throw-try-and-catch
Помилки є частиною життя, і програмування не є винятком. У JavaScript, коли виникає помилка, виконання програми зупиняється. Ось чому важливо правильно обробляти помилки. Не тільки системні помилки можуть виникати, але й розробники можуть генерувати власні виключення, що дає кращий контроль. У цьому пості ми розглянемо, як правильно генерувати та обробляти помилки, щоб ваш код був надійним і легким для налагодження.
Throw: Основи Генерації Виключень
Команда throw
використовується для генерації виключень. Ці виключення можуть бути будь-якого типу, але зазвичай ефективніше використовувати попередньо визначені типи помилок або власні об'єкти помилок для ясності та послідовності.
Ви можете генерувати різні типи значень:
throw "будь-що, що ви хочете кинути";
throw 2025; // Число
throw true; // Логічне значення
throw {
toString() {
return "Object";
},
};
function validateAge(age) {
if (age < 18) {
throw "Молодий!"; // Кидаємо рядок
}
return "Доступ надано";
}
коли умова є істинною (вік більше 18), повертаємо "Доступ надано"
коли умова хибна (вік менше 18), кидаємо рядок "Молодий!"
кидаємо "new Error"
try…catch: Серце Обробки Помилок
Команда try...catch
використовується для обробки виключень. Вона дозволяє виконати блок коду (try
) і визначити, як обробляти помилки (catch
).
try {
// Код для виконання
} catch (error) {
// Код для обробки помилки
}
Коли в блоці try
виникає помилка, виконання негайно переходить до блоку catch
, де помилку можна обробити. Якщо помилки не виникає, блок catch
пропускається.
Потужність Finally
Блок finally
містить код, який виконується після блоків try
та catch
, незалежно від того, чи було згенеровано виключення. Зазвичай він використовується для операцій очищення.
try {
console.log("Пробую виконати код.");
throw new Error("Щось пішло не так!");
} catch (error) {
console.error("Піймана помилка:", error.message);
} finally {
console.log("Це завжди виконається.");
}
Генерація Помилок: Error проти New Error
Як throw Error("message")
, так і throw new Error("message")
створюють об'єкти помилок.
Використання throw new Error
дає вам стандартизований об'єкт помилки з вбудованими властивостями, такими як name
та message
, що робить його більш передбачуваним. З іншого боку, використовуючи просто throw
, ви можете генерувати власні об'єкти помилок, якщо хочете мати більше контролю над структурою або поведінкою помилки.
[
Відмінності між “throw” і “throw new Error” у Javascript / NodeJS
Невелика різниця, але вона може допомогти.
fabiokounang.medium.com
](https://fabiokounang.medium.com/differences-between-throw-and-throw-new-error-in-javascript-nodejs-569545e980a1?source=post_page-----fbd05d6286f3--------------------------------)
Типи Помилок, Які Зустрічаються
JavaScript має кілька вбудованих типів помилок, кожен з яких вказує на різні проблеми у вашому коді:
- EvalError: Проблеми з функцією
eval()
. - RangeError: Коли число виходить за межі допустимого діапазону.
- ReferenceError: Невірна ссылка або невизначена змінна.
- SyntaxError: Некоректний синтаксис.
- TypeError: Змінна не того типу.
[
Error - JavaScript | MDN
Об'єкти помилок генеруються при виникненні помилок під час виконання.
The Error object can also be used as a base object for user-defined…
developer.mozilla.org
](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/GlobalObjects/Error?source=postpage-----fbd05d6286f3--------------------------------)
Користувацька Обробка Помилок
Іноді потрібно створювати власні помилки. Ви можете розширити об'єкт Error
, щоб додати більше контексту до ваших виключень.
class CustomError extends Error {
constructor(message) {
super(message);
this.name = "CustomError";
}
}
try {
throw new CustomError("Це користувацька помилка!");
} catch (error) {
console.error(error.name); //'CustomError'
console.error(error.message); //'Це користувацька помилка!'
}
Використання Перехоплювачів для Централізованої Обробки Помилок
Коли ви використовуєте HTTP-запити, обробка помилок на глобальному рівні є необхідною для підтримки чистоти та організованості коду. Один із поширених підходів — використання перехоплювачів, які дозволяють централізовано обробляти помилки для всіх API-запитів. Це дозволяє уникнути повторюваної обробки помилок в кожному окремому запиті.
const axios = require('axios');
// Налаштуємо перехоплювач відповіді для глобальної обробки помилок
axios.interceptors.response.use(
(response) => {
// Якщо відповідь успішна, просто повертаємо її
return response;
},
(error) => {
// Обробка помилки тут: вивести помилку в консоль і показати зручне повідомлення для користувача
console.error("Помилка API:", error.response ? error.response.data : error.message);
alert("Щось пішло не так під час отримання даних.");
return Promise.reject(error); // Продовжити ланцюг обробки помилки
}
);
// Приклад API-запиту
function fetchData() {
axios.get('https://api.example.com/data')
.then(response => {
console.log("Дані отримано:", response.data);
})
.catch(error => {
console.error("Запит не вдався:", error.message);
});
}
fetchData();
Кращі Практики для Генерації Помилок
- Використовуйте
Error
або власні типи помилок для структурованого налагодження. - Використовуйте
console.error()
замістьconsole.log()
для помилок. - Будьте конкретними: використовуйте кілька блоків
catch
або типів помилок для відповідної обробки виключень.
Перекладено з: Catch It Like a Pro: Throwing Error in JavaScript