工場でサーバーに複数のajaxリクエストを避けようとしています。私はすでに小さなキャッシングサービスを追加しましたが、私が目指すものは十分ではありません。このファクトリは、サーバが応答する前に何度か呼び出され、サーバへの複数のリクエストの生成を引き起こします。複数のajaxリクエストを避けるangularJS
これを避けるために、AJAXリクエストが実行され、オブジェクトがまだキャッシュに入っていない場合、2番目の約束が解決されるのを待つよりも、何かが見当たりません。あなたは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;
}
};
}
]);
最終的な実装を回答に追加しました。 –