Promises are not domains, they will not catch exceptions from asynchronous callbacks. You just can’t do that.
Promises do however catch exceptions that are thrown from within a then
/ catch
/ Promise
constructor callback. So use
function getPromise(){
return new Promise(function(done, reject){
setTimeout(done, 500);
}).then(function() {
console.log("hihihihi");
throw new Error("Oh no!");
});
}
(or just Promise.delay
) to get the desired behaviour. Never throw in custom (non-promise) async callbacks, always reject the surrounding promise. Use try-catch
if it really needs to be.