Что такое “unhandled promise rejection” и как его ловить?
1️⃣ Как кратко ответить
"Unhandled promise rejection" возникает, когда промис в JavaScript отклоняется (rejected), но его отклонение не обрабатывается с помощью метода .catch() или второго аргумента в .then(). Чтобы ловить такие ошибки, используйте метод .catch() для обработки всех возможных отклонений промисов или глобальный обработчик событий unhandledrejection.
2️⃣ Подробное объяснение темы
В JavaScript промисы используются для работы с асинхронными операциями. Промис может находиться в одном из трех состояний: ожидающий (pending), выполненный (fulfilled) или отклоненный (rejected). Когда промис отклоняется, это означает, что асинхронная операция завершилась с ошибкой.
Unhandled Promise Rejection — это ситуация, когда промис отклоняется, но ошибка не обрабатывается. Это может привести к неожиданным ошибкам в приложении, так как неуправляемые ошибки могут остаться незамеченными.
Пример
// Создаем промис, который сразу отклоняется
const promise = new Promise((resolve, reject) => {
reject(new Error("Что-то пошло не так"));
});
// Здесь мы не обрабатываем отклонение, что приводит к unhandled promise rejection
В этом примере промис отклоняется с ошибкой, но ошибка не обрабатывается, что приводит к "unhandled promise rejection".
Как ловить unhandled promise rejection
- Использование
.catch(): Всегда добавляйте метод.catch()к промису, чтобы обработать возможные ошибки.
const promise = new Promise((resolve, reject) => {
reject(new Error("Что-то пошло не так"));
});
// Обрабатываем отклонение с помощью .catch()
promise.catch(error => {
console.error("Ошибка поймана:", error);
});
- Использование второго аргумента в
.then(): Вы можете передать функцию для обработки ошибок как второй аргумент в метод.then().
const promise = new Promise((resolve, reject) => {
reject(new Error("Что-то пошло не так"));
});
// Обрабатываем отклонение с помощью второго аргумента в .then()
promise.then(null, error => {
console.error("Ошибка поймана:", error);
});
- Глобальный обработчик
unhandledrejection: Для отлова всех неуправляемых отклонений в приложении можно использовать глобальный обработчик событийunhandledrejection.
window.addEventListener('unhandledrejection', event => {
console.error("Необработанное отклонение промиса:", event.reason);
});
Этот обработчик позволяет вам регистрировать или обрабатывать все необработанные отклонения промисов в одном месте, что может быть полезно для отладки и мониторинга.
Зачем это нужно
Обработка отклонений промисов важна для обеспечения надежности и устойчивости приложения. Необработанные ошибки могут привести к сбоям в работе приложения и затруднить отладку. Использование методов обработки ошибок позволяет вам контролировать и управлять ошибками, улучшая пользовательский опыт и стабильность приложения.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться