Как отменить все ожидающие запросы $ ресурса с помощью обещания об изменении $state
Я пытаюсь остановить все ожидающие запросы, когда происходит изменение состояния. Приведенный ниже код прекрасно работает с $ http, но не с $resource.
var cancel=$q.defer();
$http.get('api/cafservicestatus',{timeout:cancel.promise,cancel:cancel}).then(onsuccess,onerror);
function onsuccess(result) {
console.log(result)
}
function onerror(error) {
console.log(error)
}
function stopHttp() {
$http.pendingRequests.forEach(function(request) {
if (request.cancel) {
request.cancel.resolve();
}
});
}
Но этот код не работает с $resource. Вот пример кода для $resource.
$resource(resourceUrl, {}, {
'query': { method: 'GET', isArray: true,timeout:$q.defer().promise,cancel:$q.defer()},
'get': {
method: 'GET',
transformResponse: function (data) {
if (data) {
data = angular.fromJson(data);
}
return data;
}
},
'update': { method:'PUT' }
});
Как я могу остановить все запросы, используя $ ресурс
1 ответ
Решение
Я понял это. Вы должны добавить к вашему запросу cancellable:true и отменить запрос в вашем контроллере, используя метод $cancelRequest() из $resource.
например, в вашем случае
$resource(resourceUrl, {}, {
'query': { method: 'GET', isArray: true,cancellable:true},
'get': {
method: 'GET',
transformResponse: function (data) {
if (data) {
data = angular.fromJson(data);
}
return data;
}
},
'update': { method:'PUT' }
});
и внутри вашего контроллера
var aborted= YourService.query();
//and later on state change
$scope.$on('$stateChangeSuccess',function(event){
aborted.$cancelRequest();
}
);