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