Is there any way to globally catch all exceptions including Promise exceptions. Example:
window.onerror = function myErrorHandler(errorMsg, url, lineNumber) {
alert("Error occured: " + errorMsg);//or any message
return false;
}
var myClass = function(){
}
var pr = new Promise(function(resolve, react){
var myInstance = new myClass();
myInstance.undefinedFunction(); // this will throw Exception
resolve(myInstance);
});
pr.then(function(result){
console.log(result);
});
// i know right will be this:
// pr.then(function(result){
// console.log(result);
// }).catch(function(e){
// console.log(e);
// });
This script will silently die without error. Nothing in firebug.
My question is if I do a mistake and forgot to catch it is there any way to catch it globally?
Update, native promises now do the following in most browsers:
window.addEventListener("unhandledrejection", function(promiseRejectionEvent) {
// handle error here, for example log
});
We were just discussing this the other day.
Here is how you'd do this with bluebird:
window.onpossiblyunhandledexception = function(){
window.onerror.apply(this, arguments); // call
}
window.onerror = function(err){
console.log(err); // logs all errors
}
With Bluebird it's also possible to use Promise.onPossiblyUnhandledRejection
. The calls for done
are not needed as the library will detect unhandled rejection itself unlike Q (UPDATE 2016 - I now wrote code for Q and it does this).
As for native promises - they will eventually report to either window.onerror or a new handler but the specification process is not yet done - you can follow it here.