AngularJS timeout http



我得到了一个完美的服务

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;
        }

最新更新