gpt4 book ai didi

javascript - $cacheFactory 使用自定义服务

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

我们使用 $cacheFactory 一次性获取一些配置和用户数据喜欢

var cache = $cacheFactory("Temp");

var getCachedData = function (url) {

var data = cache.get(url);

var deferred = $q.defer();

if (data) {
deferred.resolve(data);
} else {
readFromServer(url).then(function(result) {
cache.put(url, result);
deferred.resolve(result);
});
}
return deferred.promise;
};

return {
GetCachedData: getCachedData
};

如果服务获取的数据为空,那么它会调用服务器,它将从缓存返回数据,但是如果第二个调用完成了四次,那么他会调用服务器,那么我们如何使用 JavaScript 中的 C# 。

最佳答案

为了避免多次调用同一个 API,您需要进行类似的操作(我没有测试,但这应该可行):

var isRetrievingData = false;
var waitingDeferred = [];

var getData = function (url) {
var data = cache.get(url);

var deferred = $q.defer();

if (data) {
deferred.resolve(data);
} else if (isRetrievingData) {
waitingDeferred.push(deferred);
} else {
isRetrievingData = true;
waitingDeferred.push(deferred);

readFromServer(url).then(function(result) {
cache.put(url, result);

for(var i = 0; i < waitingDeferred.length; i++) {
waitingDeferred[i].resolve(result);
}
});
}
return deferred.promise;
};

这里是如何工作的:

  • 如果数据已经缓存,只需解决deferred即可返回
  • 如果数据未缓存且 isRetrivingData 为 false,则启动请求并将 isRetrivingData 设置为 true
  • 如果数据未缓存且 isRetrivingData 为 true,则意味着另一个调用正在进行中,因此不要执行任何操作,只需将延迟添加到数组中即可

当唯一的调用完成后,要将数据发送给每个调用者,您只需解析 waitingDeferred 数组中注册的每个延迟。

这对你有好处吗?

关于javascript - $cacheFactory 使用自定义服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395738/

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