AngularJS - 从返回承诺的服务中取消HTTP请求

时间:2017-03-20 15:24:37

标签: angularjs angular-promise

我的服务方法如下:

this.myServiceFunction = function(){
    var deferred = $q.defer();
    $http({
        method: 'GET',
        url: 'domain/myendpoint'
    })
        .success(function(data){
            deferred.resolve(data);
        })
        .error(function(data){
            deferred.reject(data);
        });
    return deferred.promise;
};

我以下列方式在我的控制器中使用此方法:

$scope.myControllerFunction = function(){
    myService.myServiceFunction().then(function(){
        // Do things when promise resolves
    });
};

我想在命令的另一个函数中取消上面的HTTP调用。我发现这个answer允许您通过对resolve()返回的对象调用$q.defer()方法来取消HTTP请求。但是在我的代码库中,这个对象永远不会在我的控制器中可用。

上例中的

myService.myServiceFunction()会返回从promise返回的$q.defer()对象。如何在我所拥有的范围内取消我的HTTP请求?

1 个答案:

答案 0 :(得分:2)

以下回答了这个问题,没有原始代码的开销。

git pull origin master

但是,如果出于某种原因需要使用该模式,则可以使用以下命令:

this.myServiceFunction = function(){
  this.canceler = $q.defer();
  return $http({
    method: 'GET',
    url: 'domain/myendpoint',
    timeout: this.canceler.promise   
  });
};

this.cancelServiceFunction = function() {
  return this.canceler.resolve();
};