Google Script,按顺序运行函数,不会超出执行时间

时间:2017-11-06 17:25:38

标签: google-apps-script

我有很多从网站上获取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, 等等...

1 个答案:

答案 0 :(得分:0)

我刚刚删除了concat,因为它根据MDN 存在性能问题,但显然真正的问题是提取并且我们无法做很多事情,除非您能够获得外部效果api转储更大的批次。

  

您可以从webapp启动每个功能,然后通过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);
  }
}