我有一个AngularJS函数,它从webservice加载数据,然后将其存储在localStorage中。第一次调用此函数后,应从localStorage加载数据(除非缓存在一小时后无效)。AngularJS:加载缓存或非缓存的url
我想将这个功能外在化,但是我在挠头,如何将同步和异步调用放到一个方法中。开始了。
function callWebService(url) {
var resultFromLocalStorage = localStorage.getItem(url);
if (resultFromLocalStorage && Utils.cacheIsStillValid()) { //(*)
$timeout(function() { buildTable(JSON.parse(resultFromLocalStorage)); }, 10);
} else {
$resource(url).get().$promise.then(function(result) {
localStorage.setItem("cacheExpiry", new Date().getTime() + Utils.ONE_HOUR_IN_MS);
localStorage.setItem(url, JSON.stringify(result));
buildTable(result);
});
}
}
//*Utils.cacheIsStillValid checks the localStorage item "cacheExpiry"
我想那外部化缓存的东西,所以到最后,我只是想这样的:
function callWebService(url) {
var result = getResultFromCacheOrReload(url); // to be done
buildTable(result);
}
我怎样才能做到这一点?方法getResultFromCacheOrReload(url)
的外观如何?
感谢, 伯恩哈德
你应该将缓存留给亲们。告诉浏览器通过设置etags来缓存它。 –
感谢您的回复。不幸的是,我不允许在我们的服务器上设置etags。 – Bernie