我有一个包含4个不同功能的google脚本需要一个接一个地运行,但是一个函数可以在上一个完成/完成之后运行。
每个功能所需的时间取决于,但平均每个功能大约需要15-20分钟。
每个函数都会完成一个包含大量数据的电子表格,所以我想运行第一个函数,等到第一个函数结束,运行第二个函数等,然后在触发器内加载每个信息(例如)4小时。
谢谢!
答案 0 :(得分:2)
在一般情况下,要在函数B之后运行函数A,编写一个首先调用一个的控制器例程,然后调用另一个:
function a() { /* stuff */ }
function b() { /* other stuff */ }
function doStuff() {
a();
b();
}
对于你的情况,如果你有一个执行时间限制要处理,否则会杀死他们执行你的一个函数并阻止其他函数运行,你需要编写一个使用Apps Scripts的调度例程{{ 3}}。您可以通过多种方式执行此操作,从使用设置间隔触发器安排第一个,并使用每个功能告诉Google 何时运行下一个功能,而不是运行下一个函数,或使用脚本属性指示下一个要运行的函数,手动运行一个函数并让最后一个函数为第一个函数设置调用。
链接示例:
function a() {
...
// Google will run b() within +/-15 minutes of the indicated time
// Schedule it for 16 minutes from now, so we know a() has
// completed and shut down before b runs.
var next = ScriptApp.newTrigger("b").timeBased();
next.after(16 * 60 * 1000).create();
}
function b(e) {
/* Add code to delete the one-time trigger used to call this function
(The trigger uid is in the event object e) */
...
属性方法:
function doStuff() {
var props = PropertiesService().getScriptProperties();
var next;
switch (props.getProperty("runNext")) {
case "a":
a();
next = "b";
break;
...
}
props.setProperty("runNext", next);
}
function a() {...}
...
如果您实现了一个链接函数的解决方案(与使用属性来指示运行的函数的解决方案),您将需要确保删除以前的触发器以防止触发器计数无休止地增长。