确认已发送HTTP请求

时间:2015-02-14 16:13:46

标签: javascript angularjs http

我正在使用Angular的$ http get,我想确认一个http请求被发送到我们的API。我知道.success方法,但这等待返回,有没有办法只获取$ http对象来确认请求已被发送?

1 个答案:

答案 0 :(得分:0)

我使用类似跟踪发送请求的数量,等待响应。

在应用级别添加http拦截器:

.config(['$httpProvider',
    function($httpProvider) {
        $httpProvider.interceptors.push('RequestCounterInterceptor');
    }
])

拦截器代码(您可以修改它以处理对API的URL的请求):

.factory('RequestCounterInterceptor', ['RequestCounterService', '$q',
    function(RequestCounterService, $q) {
        return {
            'request': function(request) {
                RequestCounterService.increase();
                return request;
            },
            'requestError': function(request) {
                RequestCounterService.increase();
                return $q.reject(request);
            },
            'response': function(response) {
                RequestCounterService.decrease();
                return response;
            },
            'responseError': function(response) {
                RequestCounterService.decrease();
                return $q.reject(response);
            }
        };
    }
])

服务:

.service('RequestCounterService', ['$log',
    function($log) {
        var currentRequestCount = 0; // init
        return {
            increase: function() {
                currentRequestCount++;
                $log.log("currentRequestCount ", currentRequestCount);
            },
            decrease: function() {
                currentRequestCount--;
                $log.log("currentRequestCount ", currentRequestCount);
            },
            getCount: function() {
                return currentRequestCount;
            }
        };
    }
])

然后在你的控制器,指令中的任何地方......你可以使用RequestCounterService.getCount()查看已发送了多少请求但尚未收到响应。您可以向用户显示消息,例如There are currently XY requests being processed by the server或类似内容。

但是如果处理过程需要花费太多时间,那么你应该像James Gaunt在评论中提出的那样解决你的服务器问题。