AngularJs取消http请求:应用程序在取消后仍在等待响应

时间:2015-03-06 23:33:01

标签: angularjs http

在我的应用程序中,我有一个名为'pendingRequests'的服务,用于跟踪我的http请求。我配置我的$ httpProvider来使用这个服务。

此服务的目的是让我能够取消在任何控制器中发生的所有待处理的http请求。

以下是代码:

app.service('pendingRequests', function($rootScope, $q) {
  var pending = [];
  this.get = function() {
    return pending;
  };
  this.add = function(request) {
    pending.push(request);
    //console.log("Pending Requests(before):" + pending);
  };
  this.remove = function(request) {
    angular.forEach(pending, function(p , key) {
      if(p.url == request.url) pending.splice(key, 1);
    });
   // console.log("Pending Requests(after):" + pending);
  };
  this.cancelAll = function() {
    if(typeof pending !='undefined'){
    angular.forEach(pending, function(p) {
      p.canceller.resolve();
    });
    pending.length = 0;
    }
  };
});
app.config(function($httpProvider){
$httpProvider.interceptors.push(function($q, pendingRequests){
    return {
        'request': function (config){
            var canceller = $q.defer();
            pendingRequests.add({
                url: config.url,
                canceller: canceller
            });
            config.timeout = canceller.promise;
            return config || $q.when(config);
        },
        'response': function (response){
            pendingRequests.remove(response.config);
            //pendingRequests remove request
            return response;
        }
    }
  });
});

该服务正在按预期取消请求。但是,提交的下一个请求会被延迟,就像它仍在等待另一个请求完成一样。

造成这种延迟的原因是什么?

0 个答案:

没有答案