The onunhandledrejection
is an event handler to process unhandledrejection
events that occur whenever a Promise
rejection is not handled.
Before going deep into onunhandledrejection
, let’s learn about Promise
rejection.
Promise
rejectionPromise
is an object of JavaScript, which is responsible for handling asynchronous events for either a completed state or a rejected state, which are called resolve
and reject
, respectively. Initially, it possesses a pending state, then goes to a completion or rejection state, depending on the outcome.
The method reject(reason)
of the Promise
object is used to return the rejected Promise
with a reason for the rejection in parameters.
Look at the below code:
// Rejecting the promise with a reasonvar promise = Promise.reject("Oops! I am rejected");promise.then(() => {console.log("Hello World");});
In the above code, the promise.then()
function deals with the asynchronous calls in JavaScript. The Promise
object is rejected with the reason "Oops! I am rejected"
but there is nothing to catch this rejection, so this is an unhandled rejection. It will directly go to the console, and an error message will be shown like this:
(node:22) UnhandledPromiseRejectionWarning: Oops! I am rejected
and
(node:22) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
These errors show that an unhandled promise rejection is thrown by the code and not caught.
Note: A depreciation warning
(node:21) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated.
will also be displayed because unhandled promise rejections are deprecated now.
Now, we will use the onunhandledrejection
event handler to catch the rejection thrown.
onunhandledrejection
event handlerTo catch the error gracefully and show it on the console, we can use a different method like catch
or onunhandledrejection
, but here, we are going to catch the Promise
rejection using the globally available onunhandledrejection
property from the window
object. This is useful for debugging and error handling for unexpected cases.
In the above code, we have added window.onunhandledrejection
with a message. This will catch the rejection thrown by Promise.reject()
and display the message gracefully. The following output will be shown: