首页 文章

带有catch的promises中的错误处理

提问于
浏览
2

我有一个关于$ 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 中,以保证可以处理所有错误 .

1 回答

  • 0

    当服务引发错误时,您需要添加显式拒绝语句 .

    var deferred =  $q.defer();
    someService().then(function(obj){    
          deferred.resolve(obj):
       })
     .error(function(e){
        deferred.reject(e);
      });
    
     return deferred.promise;
    

相关问题