我试图找出如何使用$ resource的timeout属性动态取消挂起的请求.理想情况下,我希望能够取消具有某些属性的请求(基于发送的参数),但似乎这可能是不可能的.与此同时,我只是尝试取消所有挂起的请求,然后重置超时承诺以允许新请求.
问题似乎是$ resource配置只允许一个静态的超时值承诺.如果我正在进行单独的$ http调用,那么我可以做到这一点是有道理的,因为我可以为超时传递新的承诺,但是如何才能为$资源工作呢?我在这里设置了一个示例plunker:http://plnkr.co/edit/PP2tqDYXh1NAOU3yqCwP?p = preview
这是我的控制器代码:
app.controller('MainCtrl', function($scope, $timeout, $q, $resource) {
$scope.canceller = $q.defer();
$scope.pending = 0;
$scope.actions = [];
var API = $resource(
'index.html', {}, {
get: {
method: 'GET',
timeout: $scope.canceller.promise
}
}
)
$scope.fetchData = function() {
if ($scope.pending) {
$scope.abortPending();
}
$scope.pending = 1;
$scope.actions.push('request');
API.get({}, function() {
$scope.actions.push('completed');
$scope.pending = 0;
}, function() {
$scope.actions.push('aborted');
});
}
$scope.abortPending = function() {
$scope.canceller.resolve();
$scope.canceller = $q.defer();
}
});
Run Code Online (Sandbox Code Playgroud)
现在,取消器在有待处理的请求时工作,但我似乎无法重置它 - 一旦一个请求被中止,所有将来的请求也将被中止. …
是否有办法拦截$ resource调用中的请求?
我想为它添加一个OAUTHv2标头,而不是为每个资源模型指定它.
目前我只能拦截响应,如文档中所述:
...
interceptor - {Object =} - 拦截器对象有两个可选方法 - response和responseError.使用http响应对象调用响应和responseError拦截器.请参阅$ http拦截器.
我知道你可以在$ http上推送一个全局拦截器,但我不想在API调用之外的任何请求中包含我的Bearer令牌(安全......)
任何正在做OAUTHv2的人都必须遇到这个问题.可惜在Angular.JS中没有标准的方法......