我正在做一个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请求仍处于待处理状态。
我如何打破发布请求?
感谢。
答案 0 :(得分:2)
AngularJS文档声明AngularJS的承诺必须已解决才能取消请求:
timeout - {number | Promise} - 超时(以毫秒为单位),或承诺在解决时应中止请求。
这也可以在source中看到,错误/拒绝回调未设置:
timeout.then(timeoutRequest);
不支持取消拒绝承诺的请求。