我得到了一个完美的服务
this.getcustomers= function() {
var deferred = $q.defer();
$http({
method: 'GET',
url: 'api/customers'
}).then(function success(data) {
deferred.resolve(data.data);
}, function error(error) {
deferred.reject(error);
});
return deferred.promise;
};
我如何添加一个timeout
到上面。我尝试了stackoverflow的样本,但没有任何工作我需要请求继续尝试5000毫秒,并在时间过去时显示错误。添加timeout : timeout|promise
对我不起作用。
任何想法?
您正在寻找的是retry
机制,而不是timeout
。在JS中,Timeout的意思是"在X时间之后执行一个动作"。
看这里的答案,应该是你正在寻找的:
当承诺被拒绝时,AngularJS服务重试
这是jsfiddle的工作链接
function httpRequestHandler () {
var timeout = $q.defer(),
result = $q.defer(),
timedOut = false,
httpRequest;
$timeout(function () {
timedOut = true;
timeout.resolve();
}, (1000 * $scope.timeout));
httpRequest = $http({
method : 'post',
url: '/echo/json/',
data: createData(),
cache: false,
timeout: timeout.promise
});
httpRequest.success(function(data, status, headers, config) {
result.resolve(data);
});
httpRequest.error(function(data, status, headers, config) {
if (timedOut) {
result.reject({
error: 'timeout',
message: 'Request took longer than ' + $scope.timeout + ' seconds.'
});
} else {
result.reject(data);
}
});
return result.promise;
}