Ловіть помилки як професіонал: Генерація помилок у JavaScript

pic

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 "Доступ надано";  
}

pic

коли умова є істинною (вік більше 18), повертаємо "Доступ надано"

pic

коли умова хибна (вік менше 18), кидаємо рядок "Молодий!"

pic

кидаємо "new Error"

try…catch: Серце Обробки Помилок

Команда try...catch використовується для обробки виключень. Вона дозволяє виконати блок коду (try) і визначити, як обробляти помилки (catch).

try {  
 // Код для виконання  
} catch (error) {  
 // Код для обробки помилки  
}

pic

pic

Коли в блоці 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") створюють об'єкти помилок.

pic

Використання 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); //'Це користувацька помилка!'  
}

pic

Використання Перехоплювачів для Централізованої Обробки Помилок

Коли ви використовуєте 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

Leave a Reply

Your email address will not be published. Required fields are marked *