[英]List all files in google drive without exceeding maximum execution time
[英]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.