공장에서 서버에 대한 여러 개의 ajax 요청을 피하려고합니다. 이미 작은 캐싱 서비스를 추가했지만 목표로는 충분하지 않습니다. 서버가 응답하기 전에이 팩토리를 여러 번 호출하여 여러 요청을 서버에 생성 할 수 있습니다.여러 Ajax 요청 방지하기 각도기
이 문제를 피하기 위해 AJAX 요청이 수행되고 개체가 아직 캐시되지 않은 경우 두 번째 약속이 해결 될 때까지 기다려야하지만 뭔가가 누락 된 것처럼 보이는 두 번째 약속 개체를 추가했습니다. . 당신이 인 getUser를 실행
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;
}
};
}
]);
답변에 마지막 구현을 추가했습니다. –