Новичок ie до JavaScript.
У меня есть эта функция, которая получает кэшированный ресурс, и если он не находится в кеше, он вызывает back-end для этого ресурса.
Однако функция вызывается дважды, оба раза сразу после входа в систему. В результате к бэкэнду отправляются два абсолютно одинаковых запроса, так как ресурс еще не кэшируется ко времени второго выполнения функции. Функция вызывается разными модулями, но модули находятся в одном сервисе.
Есть ли способ «предотвратить» выполнение функции еще раз, если предыдущее выполнение еще не закончилось?
В моем случае я думаю, что это можно сделать в двух местах - если это возможно:
function doSomething() {
return getCachedData()
.catch(function() {
return getData()
.then(saveDataToCache);
});
}
или:
function getData() {
var deferred = $q.defer();
$http.get('https://www.example.com')
.then(function(response) {
deferred.resolve(response.data);
})
.catch(function() {
deferred.reject();
});
return deferred.promise;
}