Skip to content
Advertisement

Error in promise catch does not trigger global error handler

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
User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement