У меня есть контроллер и обслуживание с кешированным значением.Как предотвратить одинаковые запросы на сервер?
app.service('nameService', ['$q','$http', function($q, $http){
var that = this;
that.name = null;
this.index = function(){
var deferred = $q.defer();
if (that.name !== null) {
// fired cahed value
console.log('cashed');
deferred.resolve(that.name);
} else {
$http.get('/api/name').success(
function(response) {
// fired request to server
console.log('server');
that.name = response.name;
deferred.resolve(that.name);
}
);
}
return deferred.promise;
}]);
При поступлении запросов в контроллер отправить с интервалом, как
app.controller('nameCtr', ['$scope', '$timeout', 'nameService'],
function($scope, $timeout, nameService){
nameService.index(); // console.log server
$timeout(function(){
nameService.index(); // console.log cached
},3000)
$timeout(function(){
nameService.index(); // console.log cashed
},6000)
}]);
Это все нормально, первый запрос обожженного server
, другой выстрелил cached
. Но если я отправлю запрос без задержки, я отправляю несколько запросов на сервер. как:
...
nameService.index(); // console.log server
nameService.index(); // console.log server
nameService.index(); // console.log server
...
Они выпустили server
, но мне нужно кэшировать. У меня несколько контроллеров с одинаковой услугой. Какой лучший способ отправить только один запрос на сервер?
Не дубликат, так как это касается кэширования ответа HTTP. Правильный способ состоял бы в том, чтобы передать '{cache: true}' и не кэшировать обещание в любом случае. –