gpt4 book ai didi

javascript - AngularJS:加载缓存或未缓存的 URL

转载 作者:行者123 更新时间:2023-12-03 05:31:25 26 4
gpt4 key购买 nike

我有一个 AngularJS 函数,它从 Web 服务加载数据,然后将其存储在 localStorage 中。第一次调用此函数后,应从 localStorage 加载数据(除非缓存在一小时后失效)。

我想外部化这个函数,但我正在摸不着头脑,如何将同步和异步调用放入一个方法中。我们开始吧。

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) 方法看起来如何?

谢谢,伯恩哈德

最佳答案

只需从 getResultFromCacheOrReload 返回一个 promise 并在解析时构建表:

function callWebService(url) {
var result = getResultFromCacheOrReload(url).then(function (result) {
buildTable(result);
});
}

函数getResultFromCacheOrReload可以是这样的:

function getResultFromCacheOrReload(url) {
var resultFromLocalStorage = localStorage.getItem(url);
if (resultFromLocalStorage && Utils.cacheIsStillValid()) {
return $q.when(resultFromLocalStorage); // Create a fulfilled promise containing resultFromLocalStorage
} else {
return $resource(url).get().then(function (result) { // Return the promise returned by the "then" method
localStorage.setItem("cacheExpiry", new Date().getTime() + Utils.ONE_HOUR_IN_MS);
localStorage.setItem(url, JSON.stringify(result));
return result; // Every object returned by a then() method is wrapped by a promise
});
}
}

关于javascript - AngularJS:加载缓存或未缓存的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40927555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com