我正在尝试以编程方式将触发器添加到Google Apps脚本中-我有一个函数main()
想要调度,它使用类似的ScriptApp.newTrigger().create()
调用包装另一个基于时间的触发器调用
function main(){
/*
* do stuff
*/
doScriptCallback();
}
function doScriptCallback(){
if(CONFIG.CALLBACK_SCRIPT_NAME != ''){
try {
ScriptApp.newTrigger(CONFIG.CALLBACK_SCRIPT_NAME)
.timeBased()
.after(5000)
.create()
Logger.log('Scheduled ' + CONFIG.CALLBACK_SCRIPT_NAME);
} catch(e) {
Logger.log(e);
}
}
}
从编辑器运行main()
正确运行doScriptCallback()
并在CONFIG.CALLBACK_SCRIPT_NAME
中调度函数
但是,如果我调度main()
,那么doScriptCallback
只记录消息,但函数不运行。
这是谷歌应用程序脚本中的限制吗?
这似乎是一个错误
谷歌的问题跟踪器上已经有一份报告详细描述了同样的行为:
- 当从V8中的另一个触发器函数创建时,已安装的触发器将被禁用
谷歌似乎知道这个问题,但如果它造成了问题,你可以在这里提交你自己的bug。
你也可以点击☆在上述页面左上角的问题编号旁边,这让谷歌知道更多的人遇到了这种情况,因此它更有可能被更快地看到——这似乎是一个常见的问题。
解决方法:
同时,你可以在Apps Script中禁用V8运行时,这将在Rhino运行时运行你的触发器。这些报告只影响V8,我可以确认我能够运行Rhino中嵌套触发器创建的函数。
您可以按照Run > Disable new Apps Script runtime powered by Chrome V8
禁用V8。