2014-09-23 151 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 
    });