我正在使用Q作为promises,但是在设置一些测试时,我发现我看到了捕获在返回promise的函数内抛出异步错误的方法。
我尝试将其封装在Q.when
内并链接fail
和/或Q.fcall
以及链式fail
,但我无法将其链接到 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);
})
工作。
{{1}}
有没有办法解决这个问题?
答案 0 :(得分:2)
setTimeout
中的异常无论如何都与承诺无关,你必须自己使用try
- catch
- 阻止它。
或者您使用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));