Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Catch all unhandled javascript promise rejections

I would like to catch all unhandled exceptions/rejections that take place within a javascript Promise. Is there a good method for catching them without adding a .catch(..) on each end of the Promise chain? (in case of forgetting to add this, the error silently disappears).

The developer console in Google Chrome can log them, I like to log them as well in a production environment.

For normal javascript exceptions I use the window.onerror function, but the errors from a Promise call this function.

Example:

window.onerror = function (e) {     alert("unhandled error: " + e); };  var p = new Promise(function (resolve, reject) {     var nullObject = null;     // Raise a TypeError: Cannot read property 'forceNullError' of null     var x = nullObject.forceNullError();      resolve(); });  p.then(function () { alert('success'); }); 

JSFiddle: https://jsfiddle.net/f7zwej6L/

*) I noticed that WinJS has a .done(..) method for what I want, but Native Promises don't.

like image 214
Peter Mols Avatar asked Jul 17 '15 09:07

Peter Mols


People also ask

Why do I get an unhandled Promise rejection with await Promise all?

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 .

How do you get unhandled Promise rejection?

If an error condition arises inside a promise, you “reject” the promise by calling the reject() function with an error. To handle a promise rejection, you pass a callback to the catch() function. This is a simple example, so catching the rejection is trivial.

What happens when a Promise is rejected in Javascript?

The static Promise. reject function returns a Promise that is rejected. For debugging purposes and selective error catching, it is useful to make reason an instanceof Error .

Does catch return a Promise?

catch() The catch() method returns a Promise and deals with rejected cases only. It behaves the same as calling Promise.


1 Answers

The whole world is waiting for the unhandledrejection and rejectionhandled events. As of March 2016, Chrome is now the first to support it.

Example:

window.addEventListener('unhandledrejection', function(event) {     console.error('Unhandled rejection (promise: ', event.promise, ', reason: ', event.reason, ').'); }); 

Specification: HTML Living Standard

Mozilla Developer: onrejectionhandled, onunhandledrejection

Chromium Issues: 495801, 393913

like image 61
Valentin Shergin Avatar answered Oct 19 '22 09:10

Valentin Shergin