【问题标题】:Determine whether the trigger is created successfully or not using GAS使用 GAS 判断触发器是否创建成功
【发布时间】: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


【解决方案1】:

您最好的选择是检查输入的日期是否已过?并且只有在没有通过时才设置触发器。

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
if( dt > new Date()){  //new Date() gives current date
 var ret = ScriptApp.newTrigger('myFunction').timeBased().at(dt).create()
}

希望有帮助!

【讨论】:

  • 谢谢杰克。不错
猜你喜欢
  • 2012-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 2022-12-19
相关资源
最近更新 更多