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), или обратиться к библиотекам и фреймворкам, которые предлагают свои варианты.
Смотрите также
Для дополнительной информации об обработке ошибок:
- MDN о try-catch: MDN try…catch
- Async/Await: MDN async function
- Руководство по промисам: MDN Promises
- Создание и генерация собственных ошибок: MDN Error