AngularJS - 使用promises处理错误

时间:2014-09-23 22:38:47

标签: javascript angularjs promise

我正在使用提供程序通过我的角应用程序中的API获取一些数据,然后在控制器中使用它。 API调用有时会停止,导致500错误。此错误会打印到控制台,我不知道如何正常处理它。

这是我的提供商代码:

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错误,即不向控制台抛出任何错误并使用本地存储中提供的数据(如果有的话)?

非常感谢

2 个答案:

答案 0 :(得分: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
  });

答案 1 :(得分: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>