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