【问题标题】:How to cancel angular $http request 1.5如何取消角度 $http 请求 1.5
【发布时间】:2016-09-01 22:18:13
【问题描述】:

我已经尝试了几件事,但在前一个请求完成之前调用该函数时似乎无法取消 http 请求。我正在使用 1.5.7,每次执行 $scope.glsuggested 时,我都想取消任何挂起的 glsuggested.get() 请求,尝试了一些方法来拒绝 $q.defer 但没有运气。

这是我得到的:

// Controller.
export class BudgetController {
  constructor ($scope, $q, $timeout, $log, glbudget, glsuggested) {
    'ngInject';

    $scope.glsuggested = function(cat) {
      var _getsuggested = glsuggested.get(cat);
      _getsuggested.then(function(data) {
        $scope.glproducts = data;
      }, function(error) {
        $scope.budgetdetails = 'error';
        $log.log(error);
      });
    };

  }
}

// Service
export class GlsuggestedService {
  constructor ($http, $q, $rootScope, $log) {
    'ngInject';
    this.$http = $http;
    this.$q = $q;
    this.$rootScope = $rootScope;
    this.$log = $log;
  }

  get(category) {

    var defer = this.$q.defer();

    var headers = {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json'
    };

    var req = this.$http({
      method: 'GET',
      headers: headers,
      url: this.$rootScope.apiurl + '/products/recommend/' + category,
      timeout: defer.promise
    });

    var _log = this.$log.log;

    req.success(function(data) {
      _log('success!', data, data.id);
      return defer.resolve(data);
    });

    req.error(function(data) {
      _log('error!', data);
      return defer.reject('error');
    });

    return defer.promise;

  }

}

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    由于您将 timeout: defer.promise 作为 $http 请求的选项之一,因此在 defer.promise 解决之前,该请求不会取消。

    因此,当您将 defer.resolve 放入 req.success 回调中时,这没有任何意义,因为您基本上是在尝试在 $http 请求完成后取消它。

    另外,$http.get实际上返回了一个promise,所以不需要通过另一个promise返回它的结果。在get() 方法中,实际上可以返回req 并在then 回调中处理结果。

    您可能还应该在您的服务中创建另一个返回defer.promise 的方法,并在您的控制器中调用该方法。然后,当您想取消 $http 请求时,您可以在控制器中 resolve 该承诺。

    抱歉,我知道这有点令人困惑,但请告诉我这是否有意义或您是否需要进一步解释。

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2019-12-17
      • 2015-11-21
      • 2015-09-12
      • 2015-06-06
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多