本文介绍了当承诺被拒绝时,AngularJS 服务重试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我从控制器内部的异步服务中获取数据,如下所示:
I'm getting data from an async service inside my controller like this:
myApp.controller('myController', ['$scope', 'AsyncService',
function($scope, AsyncService) {
$scope.getData = function(query) {
return AsyncService.query(query).then(function(response) {
// Got success response, return promise
return response;
}, function(reason) {
// Got error, query again in one second
// ???
});
}
}]);
我的问题:
- 当我从服务中得到错误而不返回承诺时如何再次查询服务.
- 在我的服务中这样做会更好吗?
谢谢!
推荐答案
您可以在服务本身而不是控制器中重试请求.
You can retry the request in the service itself, not the controller.
所以,AsyncService.query
可以是这样的:
So, AsyncService.query
can be something like:
AsyncService.query = function() {
var counter = 0
var queryResults = $q.defer()
function doQuery() {
$http({method: 'GET', url: 'https://example.com'})
.success(function(body) {
queryResults.resolve(body)
})
.error(function() {
if (counter < 3) {
doQuery()
counter++
}
})
}
return queryResults.promise
}
你可以在控制器中去掉你的错误函数:
And you can get rid of your error function in the controller:
myApp.controller('myController', ['$scope', 'AsyncService',
function($scope, AsyncService) {
$scope.getData = function(query) {
return AsyncService.query(query).then(function(response) {
// Got success response
return response;
});
}
}
]);
这篇关于当承诺被拒绝时,AngularJS 服务重试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!