无法使用$ resource取消请求

时间:2017-07-26 11:45:25

标签: javascript angularjs angular-promise angular-resource ngresource

尝试这样的解决方案之后:Aborting ngResource using a promise object我无法取消使用$ resource发出的请求。 我的最后一次尝试就是:

控制器:

 ostr << std::fixed << value;

foodTypeFactory:

angular.module('theApp')
  .controller('homeController', function ($q, foodTypeFactory) {
    var vm = this;

    vm.testButton = function () {
      vm.aborter = $q.defer();
      foodTypeFactory(vm.aborter).getTest({}, function (data) {
        console.log(data);
      });
    };
    vm.cancelButton = function () {
      vm.aborter.resolve();
    }
  });

一旦请求完成,即使我尝试取消它也会完成。 我正在使用角度资源1.6.2的Angular 1.6.2。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我可以建议您使用http拦截器..您可以停止请求......这样的事情:

1)创建一个像(auth.interceptor.js:

这样的文件
"use strict";

angular
.module("demo")
.factory('authInterceptorService', ['$q', '$location', 'localStorageService',
function ($q, $location, localStorageService) {
    // Public Method
    return {
        request: function (config) {
            config.headers = config.headers || {};

           if(!MYCONDITION){ //<-- you can here your logic to test if conitnue request flow or not
            return; //<-- TERMINATE IT ..
           }else{
            return config; //<-- CONTINUE WITH NORMAL REQUEST
           }


        }
    };
}]);

2)在app.config.js文件中:

 $httpProvider.interceptors.push("authInterceptorService");

然后在你的所有请求中(通过$ http或$ resource)这个逻辑适用...在这里你也可以在需要的时候注入Bearer Token

希望对你有帮助

答案 1 :(得分:0)

最后我找到了解决方案! 从angular 1.5 $资源可以使用$ cancelRequest()取消。 就我而言:

控制器:

angular.module('theApp')
  .controller('homeController', function (foodTypeFactory) {
    var vm = this;

    vm.testButton = function () {
      vm.onGoingRequest = foodTypeFactory.getTest({}, function (data) {
        console.log(data);
      });
    };
    vm.cancelButton = function () {
       vm.onGoingRequest.$cancelRequest();
    }
  });

foodTypeFactory:

angular.module('theApp')
  .factory('foodTypeFactory', function ($resource, BACKEND_API) {
      return $resource(BACKEND_API + '/api/foodtypes/:id', {id: '@id'}, {
        getTest: {
          cancellable: true
        }
      });
  });