【发布时间】:2017-04-03 06:05:02
【问题描述】:
我想以编程方式确定触发器是否创建成功,但即使是不成功的触发器也会带出一个唯一的 id,并且似乎已创建。
//this will show 0
var triggers = ScriptApp.getProjectTriggers();
showAlert(triggers.length); //define showAlert
var dt = new Date(2015,03,03,20,10) // create past date or feb 31
//Month index starts from 0 i.e. Jan =0,Feb=1... So on
var ret = ScriptApp.newTrigger('myFunction').timeBased().at(dt).create()
showAlert(ret.getUniqueId()); //will display ID for sure
//this will show 1
var triggers = ScriptApp.getProjectTriggers();
showAlert(triggers.length); //define showAlert
但实际上触发器并没有创建
【问题讨论】:
-
at()仅使用一次。并且无法为过去创建触发器。虽然它有一个ID,但触发器已经完成。所以触发器已经被移除了。如果将dt修改为var dt = new Date(2018,03,03,20,10),则可以在当前触发器列表中看到触发器。 -
哦不,我知道上面的事实。我的问题是如何以编程方式确定触发器是否有效。它不会抛出错误,它只会删除触发器。
-
很抱歉造成误会。在您的示例脚本中,可以检索过去创建的触发器的信息。但实际上这样的触发器不起作用。所以创建过去触发器的脚本完成后,当使用
getProjectTriggers()时,长度为零。这时候,我想可能需要时间来移除过去的触发器。所以我把Utilities.sleep(1000)放在你脚本的var ret =和var triggers =之间。说完,过去的触发信息就消失了。这会导致解决方案吗? -
使用sleep for 1 sec是否可靠,如果有网络或其他因素影响延迟怎么办?
-
这种延迟出现在没有睡眠的情况下。如果不使用睡眠,触发信息有时会消失。此时,认为该信息因延迟而被删除。但是对于很多情况,信息是可以看到的。使用 sleep 时,即使是 1 秒,信息总是消失。我认为由于
sleep绝对执行了用户在Google上设置的时间,它总是消失。
标签: google-apps-script triggers google-docs