为什么我的缓存不一致?

时间:2013-10-11 04:02:16

标签: google-apps-script google-sheets

我正在尝试使用电子表格自定义功能进行设置缓存,但结果似乎不一致/意外。有时我会得到缓存的结果,有时会刷新数据。我将超时设置为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;
}

1 个答案:

答案 0 :(得分:0)

您无法使用此类自定义功能。它记录在案。  自定义函数必须是确定性的,它们在相同的输入下始终具有相同的输出(在您的情况下没有,因为您没有传递任何参数。 电子表格会记住每个输入集的值,基本上就像是没有控制权的第二层缓存。