I\'m writing an API for my system, that\'s sending an XHR to the server and returns a promise that should be handled by the caller - so far so good.
For each API cal
I think all you want to do is rethrow the exception after you've logged it so other handlers will deal with it properly:
return deferred.promise.catch(function (error) {
console.error(error);
throw e; // rethrow the promise
});
Q use NodeJS process to raise unhandledRejection. If you dont use NodeJS, you can use this Workaround:
// Simulating NodeJS process.emit to handle Q exceptions globally
process = {
emit: function (event, reason, promise) {
switch(event)
{
case 'unhandledRejection':
console.error("EXCEPTION-Q> %s", reason.stack || reason)
break;
}
}
}
With bluebird Promises, you can call
Promise.onPossiblyUnhandledRejection(function(error){
// Handle error here
console.error(error);
});
With iojs you have the process.on('unhandledRejection')
handler as specified here. (Also worth reading this and this
As far as I know, neither native Promises anywhere else nor Q Promises offer this functionality.