是它允许链时间在谷歌应用程序脚本触发这样的:谷歌Apps脚本:不可靠的时候触发
function doGet(e){ //first invocation by user, HTTP GET
if (e == null || e.parameters == null) {
return ContentService.createTextOutput("EMPTY");
}
saveGetParametersForUser(Session.getUser().getEmail(), e);
//trigger 10 seconds
var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create();
}
function timeDrivenEvent() { //runs until there are some data in ScriptDB
Logger.log("INVOKED AT " + new Date());
removeAllPreviousTriggers(); //removes old time triggers
var somedata = loadTaskData({email: "" + Session.getUser().getEmail()});
var remainingData = processTaskData(somedata);
if(remainingData == null){
return; //we are finished here
}
removePreviousAndSaveRemainingTaskData(remainingData);
var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create();
}
- 用户的doGet()
- 直到将所有数据处理脚本首先调用以10秒的间隔自行调用(例如2分钟的处理,10秒没有任何反应,然后再处理2分钟...)
- 处理数据的大小是〜几千字节,处理时间通常需要1-2分钟。
我发生了什么有时脚本中断,数据未完全处理!我没有收到任何电子邮件警报,没有任何记录或执行记录 - 一切都很正常。
我开始想,也许10秒相当快的启动脚本方法,但API毕竟在它了...
任何想法? 这是唯一可能的解决方案,因为Google App脚本运行时间不会超过5-6分钟(请参阅配额),因此如何将大型任务分成较小的部分。
如何一个传递你会每天使用多少总处理时间? – 2013-02-20 04:59:04
在开发过程中,我每天至少运行20次脚本...这不会超过1小时/天,这是免费的谷歌应用程序的限制。我们有谷歌应用程序的业务(更大的配额)。 – 2013-02-20 05:09:36
我担心你会碰到每个脚本的20个Trigger配额。您提供的代码会重复创建触发器。所以也许你应该删除以前的触发器?那会是'ScriptApp.getProjectTriggers()'。检查处理函数是否是“timeDrivenEvent”,如果它使用'ScriptApp.deleteTrigger()',则删除它。 – 2013-02-20 06:19:34