Как отменить запросы $ ресурса
Я пытаюсь выяснить, как использовать свойство timeout $ ресурса для динамического отмены ожидающих запросов. В идеале я хотел бы просто иметь возможность отменять запросы с определенными атрибутами (на основе отправленных параметров), но, похоже, это невозможно. Тем временем я просто пытаюсь отменить все ожидающие запросы, а затем сбрасываю обещание тайм-аута, чтобы разрешить новые запросы.
Похоже, проблема заключается в том, что конфигурация $ resource допускает только одно статическое обещание для значения времени ожидания. Имеет смысл, как я мог бы сделать это, если бы я делал отдельные вызовы $ http, поскольку я мог просто передать новые обещания на время ожидания, но как это может работать для ресурса $? Я установил пример плунжера здесь: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();
}
});
Прямо сейчас, отмена работает, когда есть ожидающий запрос, но я, кажется, не могу сбросить его - как только один запрос отменяется, все будущие запросы также будут прерваны.
Я уверен, что что-то упустил, так как возможность отменять ожидающие запросы кажется довольно важной функцией большинства веб-приложений (по крайней мере, я их создал).
Спасибо