谷歌应用程序脚本递归时间表触发器



我正在尝试以编程方式将触发器添加到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。

最新更新