Window: unhandledrejection event
{{APIRef("HTML DOM")}}
The unhandledrejection event is sent to the global scope of a script when a JavaScript {{jsxref("Promise")}} that has no rejection handler is rejected; typically, this is the {{domxref("window")}} , but may also be a {{domxref("Worker")}} .
This is useful for debugging and for providing fallback error handling for unexpected situations.
Syntax
Use the event name in methods like {{domxref("EventTarget.addEventListener", "addEventListener()")}} , or set an event handler property.
addEventListener("unhandledrejection", (event) => { })
onunhandledrejection = (event) => { }
Event type
A {{domxref("PromiseRejectionEvent")}} . Inherits from {{domxref("Event")}} .
{{InheritanceDiagram("PromiseRejectionEvent")}}
Event properties
{{domxref("PromiseRejectionEvent.promise")}}{{ReadOnlyInline}}- : The JavaScript
{{jsxref("Promise")}}that was rejected.
- : The JavaScript
{{domxref("PromiseRejectionEvent.reason")}}{{ReadOnlyInline}}- : A value or
{{jsxref("Object")}}indicating why the promise was rejected, as passed to{{jsxref("Promise.reject()")}}.
- : A value or
Event handler aliases
In addition to the Window interface, the event handler property onunhandledrejection is also available on the following targets:
{{domxref("HTMLBodyElement")}}{{domxref("HTMLFrameSetElement")}}{{domxref("SVGSVGElement")}}
Usage notes
Allowing the unhandledrejection event to bubble will eventually result in an error message being output to the console. You can prevent this by calling {{domxref("Event.preventDefault", "preventDefault()")}} on the {{domxref("PromiseRejectionEvent")}} ; see Preventing default handling below for an example.
Because this event can leak data, {{jsxref("Promise")}} rejections that originate from a cross-origin script won’t fire this event.
Examples
Basic error logging
This example logs information about the unhandled promise rejection to the console.
window.addEventListener("unhandledrejection", (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
});
You can also use the onunhandledrejection event handler property to set up the event listener:
window.onunhandledrejection = (event) => {
console.warn(`UNHANDLED PROMISE REJECTION: ${event.reason}`);
};
Preventing default handling
Many environments (such as {{Glossary("Node.js")}} ) report unhandled promise rejections to the console by default. You can prevent that from happening by adding a handler for unhandledrejection events that—in addition to any other tasks you wish to perform—calls {{domxref("Event.preventDefault()", "preventDefault()")}} to cancel the event, preventing it from bubbling up to be handled by the runtime’s logging code. This works because unhandledrejection is cancelable.
window.addEventListener("unhandledrejection", (event) => {
// code for handling the unhandled rejection
// …
// Prevent the default handling (such as outputting the
// error to the console)
event.preventDefault();
});
Specifications
{{Specifications}}
Browser compatibility
{{Compat}}
See also
- Promise rejection events
{{domxref("Window/rejectionhandled_event", "rejectionhandled")}}event{{jsxref("Promise")}}