似乎很清楚如何设置一个全局方法来中止http请求.有点像
$scope.canceller = $q.defer(); var API = $resource('http:/foo.com',{},{get: { method:'GET',timeout:$scope.canceller.promise }}); $scope.abortRequests = function() { $scope.canceller.resolve(); }
但是,我希望能够仅中止特定请求.我可以为我需要能够中止的请求定义单独的资源,但这非常难看.当我调用可以允许超时有条件的$resource时,有什么方法可以传入参数或其他东西吗?也许是这样的:
var API = $resource('http:/foo.com',timeout:function() { if (FOO) { return $scope.canceller.promise; }} }});
但是如何访问FOO?
感谢您的任何见解!
解决方法
也许您可以尝试将$资源包装为模型并通过此类服务调用访问数据.该示例显示,只有$routeChangeStart可以解析超时承诺.正如你所提到的那样,它在某种程度上是有条件的.
app.factory('fooModel',function ($resource) { return function (canceler) { return $resource('http:/foo.com',{ query: {method:'GET',timeout: canceler.promise },} ); }; }); app.service('fooService',function (fooModel,$q,$rootScope) { this.getBar = function(whatEver) { var deferred = $q.defer(); var params = {}; var canceler = $q.defer(); $rootScope.$on('$routeChangeStart',function () { canceler.resolve(); }); fooModel(canceler).query( params,function(response) { deferred.reject(response); },function(error) { deferred.reject(error); }); return deferred.promise; }; });