Я пытаюсь избежать нескольких ajax-запросов к серверу на фабрике. Я уже добавил небольшую службу кэширования, но этого недостаточно для того, к чему я стремлюсь: эта фабрика может вызываться несколько раз, прежде чем сервер ответит, вызывая генерацию множественных запросов к серверу.
Чтобы избежать этого, я добавил второй объект обещания, который, если запрос 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;
}
};
}
]);