angularjs打破http长轮询帖请求

时间:2014-06-16 09:29:55

标签: angularjs http

我正在做一个http post long pooling request。我想在停止服务时取消该请求。 我的代码如下所示:

app.service("ContactsService", function($http, $rootScope, $timeout, $q, ContactsFactory) {
  var requestCanceler = $q.defer();

  this.startHttpRequest = function(userId) {
      var httpRequest = $http.post($rootScope.base_url + '/contacts/req', { toId: userId }, timeout: requestCanceler.promise});

 httpRequest.success(function(data){
      console.log("success");
    });
    httpRequest.error(function(data, status){
      console.log("error");
    });
      }

  this.stopService = function(){
    console.log("stop contacts service");
    requestCanceler.resolve("request canceled");
  } 

}

当我停止服务我的应用程序挂起时,它是因为我请求解决。解决方案;当我将其更改为.reject时,它不会挂起,但http post请求仍处于待处理状态。

我如何打破发布请求?

感谢。

1 个答案:

答案 0 :(得分:2)

AngularJS文档声明AngularJS的承诺必须已解决才能取消请求:

  

timeout - {number | Promise} - 超时(以毫秒为单位),或承诺在解决时应中止请求。

这也可以在source中看到,错误/拒绝回调未设置:

timeout.then(timeoutRequest);

不支持取消拒绝承诺的请求。