[英]Trigger to get around “Exceeded maximum execution time” in google-apps-script
我正在尝试运行以下脚本来绕过Google脚本的最长执行时间。 我让该功能运行了4分钟并设置了一个触发器,使其在5分钟内再次运行,从处理中断。 第一次通过它运行平稳并设置触发器。 当触发器第一次运行时,它处理速度非常慢,然后不再运行。 谁能告诉我我做错了什么,如果有办法解决这个问题?
function updateAll() {
var startTime= (new Date()).getTime();
var startRow = ScriptProperties.getProperty("start_row");
//Start on row 2 if null
if (!startRow) {
startRow = "2";
}
// This code deletes all the triggers
var triggers = ScriptApp.getProjectTriggers();
for(var i in triggers) {
ScriptApp.deleteTrigger(triggers[i]);
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
for (var i = startRow; i < 3000; i++) {
var currTime = (new Date()).getTime();
if(currTime - startTime >= 240000) {
ScriptProperties.setProperty("start_row", i)
//Set new trigger to run in 5 minutes
ScriptApp.newTrigger("updateAll")
.timeBased()
.at(new Date(currTime+300000))
.create();
break;
} else {
//Do logic and set values in spreadsheet
//Run sleep to avoid maximum script execution error
Utilities.sleep(100);
}
};
}
你怎么知道它运行缓慢? 电子表格是否适用于新版本? 它似乎还有很多问题 。
无论如何,我不会移除触发器并且每次都重新设置它。 我只是将其设置为每5分钟运行一次,并在检测到作业完成后将其删除。 此外,由于“最大执行时间错误”,因此无需调用Utilities.sleep
。 它仅在您遇到“每秒呼叫”类型的错误时才有用。
当我完成这个答案时,我发现你的问题可能在你的ScriptProperties
用法上。 它只能保存字符串,如果你传递其他内容,它只会尝试将其解析为字符串。 因此,当您从ScriptProperties
返回startRow
,您应该将其parseInt
为一个数字。
var startRow = parseInt(ScriptProperties.getProperty("start_row"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.