Why does an error thrown in a promise reject/catch method not trigger the global error handler? How can a global error handler that includes these be created? In my app the global error handler logs the error.
function doPromise() { return Promise.reject() } window.addEventListener('error', function (e) { console.log('Global handler ' + e.message) }) doPromise() .then() .catch(e => { console.log('Promise catch') throw new Error('Promise catch error') // Does not trigger global error handler }) throw new Error('Core error') // To prove global error handler is working
Advertisement
Answer
This is not an error, but Unhandled Rejection
:
The unhandledrejection event is sent to the global scope of a script when a JavaScript Promise that has no rejection handler is rejected
Working version of the code:
function doPromise() { return Promise.reject() } window.addEventListener('error', function(e) { console.log('Global handler ' + e.message) }) window.addEventListener('unhandledrejection', event=>{ console.log('Unhandled rejection', event) } ); doPromise().then().catch(e=>{ console.log('Promise catch') throw new Error('Promise catch error') // Does not trigger global error handler } ) throw new Error('Core error') // To prove global error handler is working