При создании триггера метод возвращает новый экземпляр класса Trigger .Это означает, что невозможно дублировать триггеры, поскольку каждый из них будет иметь уникальный идентификатор, который вы можете получить, вызвав метод getUniqueId () .
Итак, в вашем примере:
скажем, случайно кнопка с функцией, которая создает триггер, была нажата дважды
Будет создано два триггера, выполняющих одну и ту же вещь.Поэтому в идеале лучше всего создать триггер и сохранить уникальный идентификатор в свойстве скрипта apps , используя уникальное имя.Например:
var emailTrigger = ScriptApp.newTrigger("sendEmailReport").timeBased().everyHours(2).create();
var triggerId = emailTrigger.getUniqueId();
PropertiesService.getScriptProperties().setProperty("emailTriggerId", triggerId)
Конечно, вам нужно будет реализовать способ проверить, существует ли свойство со значением.Если это так, то вы пропустите создание нового.Если этого не произойдет, вы приступите к созданию нового.Итак, в итоге, это должно выглядеть примерно так:
function createNewTrigger() {
var existingTrigger = PropertiesService.getScriptProperties().getProperty("emailTriggerId");
if(!existingTrigger){
var emailTrigger = ScriptApp.newTrigger("sendEmailReport").timeBased().everyHours(2).create();
var triggerId = emailTrigger.getUniqueId();
PropertiesService.getScriptProperties().setProperty("emailTriggerId", triggerId);
} else {
//return "Trigger alredy exists";
//throw new Error("Trigger alredy exists");
}
}
БОНУС : чтобы удалить триггер , вам придется проверить, существует ли он уже,Что-то вроде этого должно привести вас в правильном направлении:
function deleteTrigger(){
var existingTrigger = PropertiesService.getScriptProperties().getProperty("emailTriggerId");
if(existingTrigger){
var allTriggers = ScriptApp.getProjectTriggers();
for(var i=0; i<allTriggers.length; i++){
if(allTriggers[i].getUniqueId() === existingTrigger){
ScriptApp.deleteTrigger(allTriggers[i]);
break;
}
}
} else {
//return "Trigger does not exists";
//throw new Error("Trigger does not exists";
//createNewTrigger();
}
}