AngularJS超时http

时间:2015-10-14 08:30:51

标签: angularjs

我得到了完美的服务

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对我不起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您要找的是retry机制,而不是timeout。无论如何,超时意味着“在X时间之后执行一个动作”,在JS中。

请在此处查看答案,应该是您正在寻找的内容:
AngularJS service retry when promise is rejected

答案 1 :(得分:0)

以下是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;
        }