我正在尝试使用电子表格自定义功能进行设置缓存,但结果似乎不一致/意外。有时我会得到缓存的结果,有时会刷新数据。我将超时设置为10秒,当我在10秒内刷新时,有时会抓取新数据,有时会缓存。即使在上次呼叫后等待超过10秒,有时我也会获得缓存结果。为什么电子表格功能有这么多的不一致? (或者我只是做错了什么?)。当我直接在实际脚本中调用函数时,它似乎更加一致,但有时我会得到不一致/意外的结果。
function getStackOverflow(){
var cache = CacheService.getPublicCache();
var cached = cache.get("stackoverflow");
if(cached != null) {
Logger.log('this is cached');
return 'this is cached version';
}
// Fetch the data and create an object.
var result = UrlFetchApp.fetch('http://api.stackoverflow.com/1.1/tags/google-apps-script/top-answerers/all-time');
var json = Utilities.jsonParse(result.getContentText()).top_users;
var rows = [],data;
for (i = 0; i < json.length; i++) {
data = json[i].user;
rows.push(data.display_name);
}
Logger.log("This is a refresh");
cache.put("stackoverflow",JSON.stringify(rows),10);
return rows;
}
答案 0 :(得分:0)
您无法使用此类自定义功能。它记录在案。 自定义函数必须是确定性的,它们在相同的输入下始终具有相同的输出(在您的情况下没有,因为您没有传递任何参数。 电子表格会记住每个输入集的值,基本上就像是没有控制权的第二层缓存。