Reputation: 18905
I'm using Q for promises, but when setting up some tests I discover I see way in catching async errors thrown inside a function that returns a promise.
I tried to wrap it inside a Q.when
and chained a fail
and or as below a Q.fcall
and a chained fail
,but I can't get it to work.
var func = function(){
var deferred = Q.defer();
setTimeout(function(){
throw new Error("async error");
},100);
return deferred.promise;
}
Q.fcall(func)
.then(function(){
console.log("success");
})
.fail(function(err){
console.log(err);
})
Is there a way to to this?
Upvotes: 3
Views: 2516
Reputation: 664620
The exception in the setTimeout
is not related anyhow to the promises, you have to catch that yourself using a try
-catch
-block.
Or you use Q.delay
:
function func(){
return Q.delay(100).then(function(){
throw new Error("async error");
});
}
func()
.then(console.log.bind(console, "success"))
.fail(console.log.bind(console));
Upvotes: 2