Ich versuche, mehrere AJAX-Anfragen an den Server in einer Fabrik zu vermeiden. Ich habe bereits einen kleinen Caching-Dienst hinzugefügt, aber es ist nicht genug für das, was ich anstrebe: Diese Fabrik kann mehrere Male aufgerufen werden, bevor der Server antwortet, was die Erzeugung mehrerer Anfragen an den Server verursacht.Vermeiden Sie mehrere AJAX-Anfragen angularJS
Um dies zu vermeiden, fügte ich ein zweites Versprechen Objekt, die, wenn die AJAX-Anfrage durchgeführt wurden und das Objekt noch nicht im Cache ist, als es warten sollte, bis eine zweite Versprechen gelöst wird, aber sieht aus wie ich etwas fehlt .
Dies ist mein Code:
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;
}
};
}
]);
Ich habe meine endgültige Implementierung in den Antworten hinzugefügt. –