2014-09-23 143 views
0

我正在使用提供程序通过我的角度应用程序中的API获取一些数据,然后在控制器中使用它。 API调用有时会关闭,导致500错误。这个错误会打印到控制台,我不知道如何正确处理它。AngularJS - 承诺处理错误

这里是我的供应商代码:

function myPvdr() { 
    this.getUrl = function() { 
    return 'http://path/to/my/API'; 
    }; 
    this.$get = function($q, $http) { 
    var self = this; 
    return { 
     getData: function(points) { 
     var d = $q.defer(); 
     $http({ 
      method: 'GET', 
      url: self.getUrl(), 
      cache: true 
     }).success(function(data) { 
      d.resolve(data); 
     }).error(function(err) { 
      d.reject(err); 
     }); 
     return d.promise; 
     } 
    } 
    } 
} 

这里是我如何使用它在我的控制器:

function myCtrl($scope, myProvider, localStorageService) { 
    $scope.myData = localStorageService.get('data') || {}; 

    myProvider.getData() 
    .then(function(data) { 
     localStorageService.set('data', data); 
     $scope.data = data; 
    }); 
} 

我怎样才能妥善处理500错误,即不引发任何错误控制台并使用本地存储提供的数据(如果有)?

非常感谢

+0

这对Angular来说是不可知的。作为错误处理问题的副本关闭。另外请考虑阅读关于延期反模式以及如何避免它。你的整个getdata可以类似地返回$ http.get(...因为$ http已经返回promise。 – 2014-09-23 22:58:53

回答

0

var app = angular.module('app', []); 
 

 

 

 
function myProvider($http, $q) { 
 
    this.getUrl = function() { 
 
    return 'http://path/to/my/API'; 
 
    }; 
 
    
 
     
 
    this.getdata = function(points) { 
 
     var d = $q.defer(); 
 
     $http({ 
 
      method: 'GET', 
 
      url: this.getUrl(), 
 
      cache: true 
 
     }).then(function(data) { 
 
      d.resolve(data); 
 
     },function(err) { 
 
      d.reject(err); 
 
     }); 
 
     return d.promise; 
 
     
 
    }; 
 
    return this; 
 
} 
 
app.factory('myProvider', myProvider); 
 
app.controller('firstCtrl', function($scope,myProvider){ 
 
    
 
// $scope.myData = localStorageService.get('data') || {}; 
 

 
    getdata = function() { 
 
     
 
    myProvider.getdata() 
 
    .then(function(data) { 
 
     localStorageService.set('data', data); 
 
     $scope.data = data; 
 
    }, 
 
     //handle error 
 
     function(e){ 
 
     alert("Error " + e.status); 
 
     
 
     
 
    }); 
 
    }; 
 
    getdata(); 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="app"> 
 
    <div ng-controller="firstCtrl"> 
 

 
     </div> 
 
</body>

1

您可以赶上拒绝承诺的是这样的:

myProvider.getData() 
.then(function(data) { 
    // promise resolved, data treatment 
}, function(error) { 
    // promise rejected, display error message 
}); 

myProvider.getData() 
.then(function(data) { 
    // promise resolved, data treatment 
    }) 
.catch(function(error) { 
    // promise rejected, display error message 
    });