使用$ http我可以很容易地捕获像401这样的错误:
$http({method: 'GET', url: 'http://localhost/Blog/posts/index.json'}).
success(function(data, status, headers, config) {
$scope.posts = data;
}).
error(function(data, status, headers, config) {
if(status == 401)
{
alert('not auth.');
}
$scope.posts = {};
});
但是在使用服务时我怎么能做类似的事情。这就是我当前服务的外观:
myModule.factory('Post', function($resource){
return $resource('http://localhost/Blog/posts/index.json', {}, {
index: {method:'GET', params:{}, isArray:true}
});
});
(是的,我只是学习角度)。
解决方案(感谢Nitish Kumar和所有贡献者)
在Post控制器中,我正在调用这样的服务:
function PhoneListCtrl($scope, Post) {
$scope.posts = Post.query();
}
//PhoneListCtrl.$inject = ['$scope', 'Post'];
根据所选答案的建议,现在我这样称呼它并且有效:
function PhoneListCtrl($scope, Post) {
Post.query({},
//When it works
function(data){
$scope.posts = data;
},
//When it fails
function(error){
alert(error.status);
});
}
//PhoneListCtrl.$inject = ['$scope', 'Post'];
答案 0 :(得分:10)
在控制器调用中发布像。
Post.index({},
function success(data) {
$scope.posts = data;
},
function err(error) {
if(error.status == 401)
{
alert('not auth.');
}
$scope.posts = {};
}
);
答案 1 :(得分:1)
资源返回promises就像http一样。只需勾选错误解决方案:
Post.get(...).then(function(){
//successful things happen here
}, function(){
//errorful things happen here
});
答案 2 :(得分:1)
$ http是一项服务,就像$ resource是一项服务一样。
myModule.factory('Post', function($resource){
return $http({method: 'GET', url: 'http://localhost/Blog/posts/index.json'});
});
这将返回承诺。您还可以在工厂和链中使用承诺,以便您的工厂(服务)为您执行所有错误处理。