Окно: событие unhandledrejection
Событие unhandledrejection отправляется в глобальную область видимости скрипта при отклонении JavaScript Promise, у которого нет обработчика отклонения; обычно это window, но также может быть Worker.
Это полезно для отладки и для предоставления резервного обработки ошибок в неожиданных ситуациях.
Синтаксис
Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика события.
addEventListener("unhandledrejection", (event) => {});
onunhandledrejection = (event) => {};
Тип события
A PromiseRejectionEvent. Наследуется от Event.
Свойства события
-
PromiseRejectionEvent.promiseТолько для чтения -
JavaScript
Promise, который был отклонен. -
PromiseRejectionEvent.reasonТолько для чтения -
Значение или
Object, указывающее, почему промис был отклонен, как передано вPromise.reject().
Псевдонимы обработчика событий
В дополнение к интерфейсу Window, свойство обработчика событий onunhandledrejection также доступно на следующих объектах:
Примечания по использованию
Разрешение события unhandledrejection на всплытие в конечном итоге приведет к выводу сообщения об ошибке в консоль. Вы можете предотвратить это, вызвав preventDefault() для PromiseRejectionEvent; см. Предотвращение обработки по умолчанию ниже для примера.
Поскольку это событие может вызывать утечку данных, отклонения Promise, которые исходят из скрипта другого домена, не будут вызывать это событие.
Примеры
Базовая регистрация ошибок
В этом примере регистрируется информация об отклонении необработанного промиса в консоли.
window.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
Вы также можете использовать свойство обработчика событий onunhandledrejection для настройки обработчика событий:
window.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
Предотвращение обработки по умолчанию
Многие среды (например, Node.js) по умолчанию сообщают об отклонениях необработанных промисов в консоли. Вы можете предотвратить это, добавив обработчик для событий unhandledrejection , который, помимо любых других задач, которые вы хотите выполнить, вызывает preventDefault() для отмены события, предотвращая его всплытие и обработку кодом регистрации среды выполнения. Это работает, потому что событие unhandledrejection отменяемо.
window.addEventListener("unhandledrejection", (event) => {
// code for handling the unhandled rejection
// …
// Prevent the default handling (such as outputting the
// error to the console)
event.preventDefault();
});
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
unhandledrejection_event |
49 | 79 | 69event.preventDefault() не предотвращает Firefox от вывода сообщения об ошибке в консоли, см. ошибку 1642147. |
36 | 11 | 49 | 79event.preventDefault() не предотвращает Firefox для Android от вывода сообщения об ошибке в консоли, см. ошибку 1642147. |
36 | 11.3 | 5.0 | 49 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event