Я пытаюсь избежать нескольких запросов ajax на сервере на заводе. Я уже добавил небольшую службу кеширования, но этого недостаточно для того, на что я нацелен: эту фабрику можно вызвать несколько раз, прежде чем сервер ответит, вызывая генерацию нескольких запросов на сервер.Избегайте нескольких запросов ajax angularJS
Чтобы избежать этого, я добавил второй объект обещания, который, если запрос AJAX был выполнен, и объект еще не находится в кеше, чем он должен ждать, пока второе обещание будет разрешено, но похоже, что я что-то не хватает ,
Это мой код:
myApp.factory('User', ['Restangular', '$q',
function (Restangular, $q) {
var userCache, alreadyRun = false;
return {
getUser: function() {
var deferred = $q.defer(), firstRun= $q.defer();
if (!userCache && !alreadyRun) {
alreadyRun = true;
Restangular.all('user').getList().then(function (user) {
console.log('getting user live ');
userCache = user[0].email;
firstRun.resolve(user[0].email);
});
} else if (!userCache && alreadyRun) {
console.log('waiting for the first promise to be resolved ');
firstRun.then(function(user) {
console.log('resolving the promise');
deferred.resolve(userCache);
});
} else {
console.log('resolving the promise from the cache');
deferred.resolve(userCache)
}
return deferred.promise;
}
};
}
]);
Я добавил свою окончательную реализацию в ответы. –