繁体   English   中英

Google脚本,按顺序运行函数而不会超过执行时间

[英]Google Script, Run functions in sequence without exceeding execution time

我有很多从网站获取JSON API数据的函数,但是如果我以这种方式依次运行它们,则会收到超出执行时间的错误:

function fetchdata () {
    data1();
    data2();
    data3();
    data4();
    ...
}

我可以安排一个触发器在另一个5分钟运行一次(因为一个触发器在3分钟内运行),但是我想知道是否还有其他方法。 谢谢

编辑:每个“数据”功能是这样的:

function data1() {

  var addresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Import");
  var baseUrl = 'https://myapiurl';

  var address = addresses.getRange(2, 1, 500).getValues();

  for(var i=0;i<address.length;i++){
    var addrID = address[i][0];
    var url = baseUrl.concat(addrID);
    var responseAPI = UrlFetchApp.fetch(url);
    var json = JSON.parse(responseAPI.getContentText());

    var data = [[json.result]];
    var dataRange = addresses.getRange(i+2, 2).setValue(data);

  }
}

data2用于502-1001行,data3用于1002-1501行,依此类推...

我只是删除了concat,因为根据MDN而言,它存在性能问题, 但是显然,真正的问题是获取 ,除非您可以获取外部api来转储更大的批处理,否则我们将无能为力。

您可以从Web应用程序启动每个功能,然后通过withSuccessHandler返回它,然后启动系列中的下一个脚本,并以菊花链方式遍历所有子功能,直到完成。 每个子功能将花费3分钟左右的时间,但您只需要担心将每个子功能保持在6分钟以内即可。

function data1() 
{
  var addresses = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Import");
  var baseUrl = 'https://myapiurl';
  var address = addresses.getRange(2, 1, 500).getValues();
  for(var i=0;i<address.length;i++){
    var responseAPI = UrlFetchApp.fetch(baseUrl + address[i][0]);
    var json = JSON.parse(responseAPI.getContentText());
    var data = [[json.result]];
    var dataRange = addresses.getRange(i+2, 2).setValue(data);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM