JavaScript:
Обработка ошибок

Как:

Вот классический блок try-catch:

try {
  // Код, который может вызвать ошибку
  let result = potentiallyRiskyOperation();
  console.log('Успех:', result);
} catch (error) {
  // Что делать, если возникла ошибка
  console.error('Упс:', error.message);
}

Пример вывода, когда ошибки не произошло:

Успех: 42

И когда произошла ошибка:

Упс: Что-то пошло не так

Для асинхронного кода, где используются промисы, используйте try-catch в асинхронной функции:

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), или обратиться к библиотекам и фреймворкам, которые предлагают свои варианты.

Смотрите также

Для дополнительной информации об обработке ошибок: