AngularJS - 从 Returns 承诺的服务取消 HTTP 请求

AngularJS - Cancelling a HTTP Request From a Service That Returns a 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 允许您通过对从 $q.defer() 返回的对象调用 resolve() 方法来取消 HTTP 请求。但是在我的代码库中,这个对象从未在我的控制器中可用。

myService.myServiceFunction() 在上面的示例中 returns 从 $q.defer() 返回的 promise 对象。如何在我拥有的范围内取消我的 HTTP 请求?

以下内容回答了问题,没有您原始代码中的开销。

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();
};

但是,如果您出于某种原因需要使用该模式,您可以使用以下内容:

this.myServiceFunction = function(){
  this.canceler = $q.defer();
  this.deferred = $q.defer();

  $http({
    method: 'GET',
    url: 'domain/myendpoint',
    timeout: this.canceler.promise   
  })
  .success(function(data){
    deferred.resolve(data);
  })
  .error(function(data){
    deferred.reject(data);
  });

  return deferred.promise;
};

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