Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用$resource取消请求_Javascript_Angularjs_Angular Promise_Angular Resource_Ngresource - Fatal编程技术网

Javascript 无法使用$resource取消请求

Javascript 无法使用$resource取消请求,javascript,angularjs,angular-promise,angular-resource,ngresource,Javascript,Angularjs,Angular Promise,Angular Resource,Ngresource,在尝试了以下解决方案后:我无法取消使用$resource发出的请求。 我最后一次尝试是: 控制器: angular.module('theApp') .controller('homeController', function ($q, foodTypeFactory) { var vm = this; vm.testButton = function () { vm.aborter = $q.defer(); foodTypeFactory(vm.

在尝试了以下解决方案后:我无法取消使用$resource发出的请求。 我最后一次尝试是:

控制器:

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();
    }
  });
食品类型工厂:

angular.module('theApp')
  .factory('foodTypeFactory', function ($resource, BACKEND_API) {
    return function (aborter) {
      return $resource(BACKEND_API + '/api/foodtypes/:id', {id: '@id'}, {
        getTest: {
          timeout: aborter.promise
        }
      });
    }
  });
angular.module('theApp')
  .factory('foodTypeFactory', function ($resource, BACKEND_API) {
      return $resource(BACKEND_API + '/api/foodtypes/:id', {id: '@id'}, {
        getTest: {
          cancellable: true
        }
      });
  });
一旦提出请求,即使我试图取消请求,请求也会完成。 我正在使用Angular 1.6.2和Angular resource 1.6.2


我做错了什么

我可以建议您使用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
           }


        }
    };
}]);
然后在所有请求(通过$http或$resource)中应用此逻辑…如果需要,也可以在此处注入承载令牌


希望它能帮助你

我终于找到了解决办法! 从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();
    }
  });
食品类型工厂:

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

一旦完成,我需要取消请求。使用这种方法,我只能在完成请求之前取消请求。如果需要,您可以截获响应..始终在我编写的文件中..并且不返回..如果您的条件不匹配