我对$ q promises中的错误处理有疑问。下面的代码不适用于处理通过受控拒绝或通过$ q解决的承诺之外的错误。意思是,如果错误被抛出代码中的任何地方而没有被拒绝,则catch块将不会触发。有没有另一种方法让捕获能够捕获任何错误?我知道这个调用可以放在try catch中,但是我想知道是否有办法让$ q catch像常规的javascript catch一样。
angular.module('myTest',[]).controller('myController',function($q){
function someService(){
var deferred = $q.defer();
throw 'error';
deferred.resolve({});
return deferred.promise;
}
someService().then(function(obj){
console.log('then');
}).catch(function(e){
console.log(e);
});
});
我唯一希望处理所有错误来做这样的事情:
try
{
someService().then(function(obj){
console.log('then');
});
}
catch(e){
console.log('an error happened ' + e);
}
用例她是我在someService()中调用另一个服务,它抛出了一个我无法控制的错误,我无法确保拒绝承诺。
为什么$ q promises内部没有包含在javascript try catch
中,以保证可以处理所有错误。
答案 0 :(得分:0)
当服务引发错误时,您需要添加显式拒绝语句。
var deferred = $q.defer();
someService().then(function(obj){
deferred.resolve(obj):
})
.error(function(e){
deferred.reject(e);
});
return deferred.promise;