如何修复Google Apps Script重复创建的工作日时间触发器重复触发问题
解决触发器重复创建导致函数多次触发的问题
问题根源
多次运行createTriggers函数会重复创建针对take1的工作日晚8点触发器,最终导致同一时间点take1被触发多次。
步骤1:精准清理重复触发器
修复你找到的删除触发器代码,只删除和take1相关的时钟触发器(避免误删其他函数的触发器):
function deleteTake1Triggers() { var allTriggers = ScriptApp.getProjectTriggers(); // 倒序遍历删除,避免因数组长度变化导致索引异常 for (var i = allTriggers.length - 1; i >= 0; i--) { var trigger = allTriggers[i]; // 筛选触发函数为take1的时钟触发器 if (trigger.getEventType() === ScriptApp.EventType.CLOCK && trigger.getHandlerFunction() === "take1") { ScriptApp.deleteTrigger(trigger); } } }
步骤2:修改创建触发器的函数,避免重复
更新createTriggers,让它每次运行前先清理旧的take1触发器,再创建新的:
function createTriggers() { // 先清理所有已存在的take1触发器 deleteTake1Triggers(); var workDays = [ ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY, ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY, ScriptApp.WeekDay.FRIDAY ]; for (var i = 0; i < workDays.length; i++) { ScriptApp.newTrigger("take1") .timeBased() .onWeekDay(workDays[i]) .atHour(20) .create(); } }
操作流程
- 在脚本编辑器中运行
deleteTake1Triggers,清除所有已存在的重复触发器 - 运行修改后的
createTriggers,创建唯一的5个工作日触发器(周一至周五晚8点) - 之后即使误触运行
createTriggers,也会先清理旧触发器再重建,不会出现重复触发的问题
内容的提问来源于stack exchange,提问作者Diana Economou
相关产品推荐
相关产品推荐

