作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 4 个不同函数的 google 脚本,需要依次运行,但一个函数可以在前一个函数完成/完成后立即运行。
每个函数所需的时间各不相同,但平均每个函数大约需要 15-20 分钟。
每个函数都会完成一个包含大量数据的电子表格,因此我想在触发器内运行第一个函数,等到第一个函数结束,运行第二个函数等,以每隔(例如)4加载信息小时。
谢谢!
最佳答案
一般情况下,要在函数 B 之后运行函数 A,需要编写一个 Controller 例程,首先调用其中一个,然后调用另一个:
function a() { /* stuff */ }
function b() { /* other stuff */ }
function doStuff() {
a();
b();
}
对于您的情况,您需要处理一个执行时间限制,否则会终止您的其中一个函数的执行并阻止其余函数的运行,您需要编写一个使用 Apps 脚本 ScriptApp
class 的调度例程。您有多种方法可以做到这一点,从使用设置的间隔触发器安排第一个函数,以及使用每个函数告诉 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() {...}
...
如果您实现一个链接函数的解决方案(相对于使用属性来指示要运行哪个函数的解决方案),您将需要确保删除以前的触发器以防止触发器计数无休止地增长。
关于google-apps-script - 谷歌脚本: How to call a function to run after another function is completed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50051037/
我是一名优秀的程序员,十分优秀!