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