我创建了六个getData
函数,每个函数对不同的服务进行API调用(四个RESTful JSON,两个SOAP XML)。对于每个getData
函数,我创建了一个setTrigger
函数,看起来有点像这样...
function setGenerationTrigger() {
ScriptApp.newTrigger('generationControl')
.timeBased()
.everyMinutes(30)
.create();
}
我创建了一个单独的createSchedule
函数,该函数删除了所有现有触发器并执行每个setTrigger
函数。在这六个触发器中,我需要三个来运行.everyMinutes(30)
,两个需要运行.everyHours(2)
,最后一个要运行.everyHours(6)
。这会按照我的期望执行,并且触发器从createSchedule
运行时开始以所需的间隔运行。
我要解决的问题是我想使这些setTrigger
函数交错,例如:
.everyMinutes(30)
从12:00(12:30、13:00、13:30等)开始.everyMinutes(30)
从12:10开始(12:40、13:10、13:40等).everyMinutes(30)
从12:20开始(12:50、13:20、13:50等).everyHours(2)
从12:00(14:00、16:00、18:00等)开始.everyHours(2)
从13:00(15:00、17:00、19:00等)开始我希望它和添加一样容易:
.atHour(12)
,但这只会在该小时内每天运行.atMinute(10)
,但由于此方法无效,因此会出错可以使用单个函数从Google Apps脚本执行此操作吗?还是我只需要从所需的时间点手动安排每个触发器? 还是有另一种/更好的方法来获得相同的结果?
答案 0 :(得分:1)
您可以尝试类似
ScriptApp.newTrigger("everydayCreate")
.timeBased()
.at(dStart)
.create();
ScriptApp.newTrigger("everyDayDelete")
.timeBased()
.at(dStop)
.create();
function everydayCreate(){
ScriptApp.newTrigger("everyMinutes")
.timeBased()
.everyMinutes(30)
.create();
}
function everyDayDelete()
{
//filter everyMinutes Trigger(s) then
ScriptApp.deleteTrigger(trigger);
}
function everyMinutes(){
//main process
}
注意
at(Date)的舍入错误为15分钟。
指定触发器何时运行(前后15分钟)。
参考
答案 1 :(得分:1)
所以这就是我所要解决的...首先,它具有删除所有现有触发器并启动交错时间表的功能。
function startTriggers() {
deleteTriggers();
var d = new Date();
ScriptApp.newTrigger("startNow")
.timeBased()
.at(d) // using .at() as GAS doesn't accept .after(0) / .after(0 * 60 * 1000)
.create();
ScriptApp.newTrigger("startIn10")
.timeBased()
.after(10 * 60 * 1000)
.create();
ScriptApp.newTrigger("startIn60")
.timeBased()
.after(60 * 60 * 1000)
.create();
}
然后为这些触发器中的每一个创建一个单独的函数,该函数为每个API调用嵌套触发器,就像这样。
function startNow() {
ScriptApp.newTrigger('huntlyControl')
.timeBased()
.everyHours(2)
.create();
ScriptApp.newTrigger('generationControl')
.timeBased()
.everyMinutes(30)
.create();
}
function startIn10() {
ScriptApp.newTrigger('hvdcControl')
.timeBased()
.everyMinutes(30)
.create();
}
function startIn60() {
ScriptApp.newTrigger('huntlyControl2')
.timeBased()
.everyHours(2)
.create();
}
结果是触发器的时间表,看起来像这样...
Disabled
触发器是我在开始时创建的“交错时间表”,将在午夜之后消失,因此不必担心它们每天都会重新创建/重新触发。实际上,现在我的触发时间表如下所示,而无需我进行任何手动整理。
非常感谢@JSmith的回答,虽然我没有完全使用它,但还是给了我一个投票,以在此处提供灵感。