通过触发器名称以编程方式删除基于时间的Google Apps脚本触发器?

use*_*736 5 triggers google-apps-script

如何通过触发的函数名称而不是triggerarray id以编程方式删除Google Apps脚本基于时间的触发器?

我正在创建一个触发器,稍后我想按名称删除触发器.我试过这个:

ScriptApp.deleteTrigger("myfunction");
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我不想使用这种方法:

var triggers = ScriptApp.getProjectTriggers();
    ScriptApp.deleteTrigger(triggers[0]);
Run Code Online (Sandbox Code Playgroud)

由于我同时有多个触发器,可能会删除错误的触发器!那么如何通过名称而不是触发器数组ID来删除触发器?

function demo(){
  ScriptApp.newTrigger("myfunction")
    .timeBased()
    .everyMinutes(1)
    .create(); 
  }

  function myfunction(){
    // do some stuff here then stop the trigger by name
    ScriptApp.deleteTrigger("myfunction");
  }
}
Run Code Online (Sandbox Code Playgroud)

Bry*_*n P 10

如果遍历所有触发器,则可以使用以下命令访问处理函数名称:

var triggers = ScriptApp.getProjectTriggers();
for ( var i in triggers ) {
  var funcName = triggers[i].getHandlerFunction()
}
Run Code Online (Sandbox Code Playgroud)

......如文档中所示.

  • 是否可以通过id删除触发器? (3认同)

小智 6

@code-guy

 // Deletes all triggers in the current project.
 var triggers = ScriptApp.getProjectTriggers();
 for (var i = 0; i < triggers.length; i++) {
   ScriptApp.deleteTrigger(triggers[i]);
 }
Run Code Online (Sandbox Code Playgroud)

来自文档


小智 5

您可以根据唯一的 id\xef\xbc\x8ccode 在触发触发器时精确删除它,例如:

\n
function trigger4SendMediaGroup(event) {\ntry {\n    var triggerUid = event.triggerUid;\n    var triggers = ScriptApp.getProjectTriggers();\n    if(triggers && triggers.length > 0){\n        triggers.forEach(item=>{\n            if(item.getUniqueId() == triggerUid){\n                ScriptApp.deleteTrigger(item);\n            }\n        })\n    }\n    //other process\n
Run Code Online (Sandbox Code Playgroud)\n