リクエストの入力を記憶することができるので、get メソッドを呼び出すと、メモライザー オブジェクトにリクエスト パラメータによるハッシュ形式と等しいキーが含まれている場合、同じものが含まれている限り、このリクエストがキャッシュされることがわかります。 params は以前の他のリクエストと同じです。各キーの下にタイムスタンプを保存して、そのリクエストが最初に実行されてから現在までのミリ秒の差を計算できます。
// some where on your code
app.factory('MyMemorizer', ['EXPIRATION_CACHE_TIME', function
(EXPIRATION_CACHE_TIME) {
// EXPIRATION_CACHE_TIME constant with the milliseconds of the expiration cached
var memo = {};
return {
entryExist: function (obj) {
var timestamp = getEntry(inputs),
timeDelta = Date.now() - timestamp;
return timeDelta > EXPIRATION_CACHE_TIME);
}
};
function getEntry(obj) {
var hash = createHash(obj);
if (memo.hasOwnProperty) {
return memo[hash];
}
memo[hash] = Date.now();
return memo[hash];
}
function createHash(obj) {
var arr = [];
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
arr.push(encodeURIComponent(prop) + '=' + encodeURIComponent(obj[prop]));
}
}
return arr.join('&');
}
});
次に、コントローラーまたはサービス、または必要な場所に注入します。
function invokeGetRequest (inputs) {
// ... do your request
if (MyMemorizer.entryExist(inputs)) {
// request is cached
}
}