嘿,我是Google Apps Script的初学者。我收到一个错误:
异常:此脚本的触发器过多。
即使我只有 1 个触发器,即:
ScriptApp.newTrigger("Status()").timeBased().atDate(2021, 2, 1).create();
我实际上正在考虑使用更多时间驱动的触发器,但我尝试了 1 并且它有此错误。你知道发生了什么吗?
启动 Web 应用时,始终会创建新的触发器。有没有办法在访问 Web 应用程序时保留触发器而不创建另一个触发器?
问题
每次打开 Web 应用时安装新触发器。
确保只安装触发器的一个实例
下面的示例是一个实用程序,用于检查可安装触发器是否已就位或需要安装。根据自己的喜好对其进行配置,并在每次使用触发器打开 Web 应用时运行doGet
。
/**
* @summary gets or installs a trigger
* @param {string} callbackName
* @param {GoogleAppsScript.Script.EventType} type
* @param {function} installer
*/
const getOrIntallTrigger = (callbackName, type, installer) =>
/**
* @returns {?GoogleAppsScript.Script.Trigger}
*/
() => {
console.log(`Checking for triggered ${callbackName} function`);
const ss = SpreadsheetApp.getActiveSpreadsheet();
const triggers = ScriptApp.getUserTriggers(ss);
const found = triggers
.filter(trigger => trigger.getEventType() === type && trigger.getHandlerFunction() === callbackName);
const [trigger] = found;
!trigger && installer();
return trigger;
};
笔记
- 要使这个工作,您需要启用 V8 运行时并熟悉 ES6 语法。