0

嘗試一些像這樣的解決方案後:Aborting ngResource using a promise object我無法取消使用$ 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(); 
    } 
    }); 

foodTypeFactory:

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

一旦請求由它完成,即使我試着取消它。 我正在使用角度資源1.6.2的Angular 1.6.2。

我在做什麼錯?

回答

0

最後我找到了一個解決方案! 從角度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 
     } 
     }); 
    }); 
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或通過$資源)這個邏輯是應用......在這裏,你還可以把注入持票人令牌,如果你n eed it

希望它能幫到你

+0

我需要取消該請求一旦完成。採用這種方法,我只能在完成之前取消請求。 – Roomm

+0

對不起..但如果它完成了...你如何取消它? .... –

+0

如果你想你可以攔截響應..總是在我寫的文件..並不返回它..如果你的條件不匹配 –