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.
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 .
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.
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 .
catch() The catch() method returns a Promise and deals with rejected cases only. It behaves the same as calling Promise.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With