2017-04-03 23 views
0

我想确定触发器是否成功创建,但即使是不成功的触发器也会生成唯一的ID并且似乎已创建。确定触发器是否成功创建使用GAS

//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 

但实际上触发不会创建

+0

'(at)''只能使用一次。过去不能创建触发器。虽然它有一个ID,但触发器已经完成。所以触发器已经被删除。如果将''dt''修改为''var dt = new Date(2018,03,03,20,10)'',您可以在当前触发器列表中看到触发器。 – Tanaike

+0

哦,不,我知道上述事实。我的问题是,我将如何确定触发器是否有效或不是程序上。它不会抛出错误,它只会删除触发器。 –

+0

我很抱歉误会。在您的示例脚本中,可以检索过去一段时间创建的触发器的信息。但实际上这种触发器不起作用。因此,在创建过去触发器的脚本完成后,使用''getProjectTriggers()''时,长度为零。在这个时候,我认为时间可能是必要的,以消除过去的触发。所以我把“Utilities.sleep(1000)”放在脚本的''var ret =''和''var triggers =''之间。放置之后,过去时间的触发信息消失了。这是否会导致解决方案? – Tanaike

回答

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() 
} 

希望帮助!

+0

谢谢杰克。好 –