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), або використовувати більш витончені бібліотеки та фреймворки, які пропонують своє бачення.

Дивіться також

Більше про обробку помилок: