docs.rodeo

MDN Web Docs mirror

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

Event handler aliases

In addition to the Window interface, the event handler property onunhandledrejection is also available on the following targets:

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

In this article

View on MDN