首页 文章

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

提问于
浏览
2

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

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

ScriptApp.deleteTrigger("myfunction");

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

var triggers = ScriptApp.getProjectTriggers();
    ScriptApp.deleteTrigger(triggers[0]);

由于我同时有多个触发器,可能会删除错误的触发器!那么如何通过名称而不是触发器数组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");
  }
}

4 回答

  • 1

    循环遍历触发器,搜索处理程序函数上的任何匹配项,然后删除它们 .

    虽然OP只提到了一个触发器,但是多个触发器可能会针对相同的处理函数,因此以下代码段可以满足单个和多个匹配 .

    function myfunction(){
        // do some stuff here then stop the trigger(s) by name
        var triggers = getProjectTriggersByName('myfunction');
        for (var i = 0; i < triggers.length; ++i)
            ScriptApp.deleteTrigger(triggers[i]);
    }
    
    function getProjectTriggersByName(name) {
        return ScriptApp.getProjectTriggers().filter(
            function(s) {return s.getHandlerFunction() === name;}
        );
    }
    

    请参阅ScriptAppTrigger上的文档 .

    根据 Bryan P 的答案,但有代码 .

  • 8

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

    var triggers = ScriptApp.getProjectTriggers();
    for ( var i in triggers ) {
      var funcName = triggers[i].getHandlerFunction()
    }
    

    ......如shown in the docs .

  • 2

    @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]);
     }
    

    From Docs

  • 0

    转到编辑>当前项目触发器 . 这是存储和管理所有触发器的地方 . handlerFunction反映了“当前项目的触发器”中的“运行”名称 . 谷歌在我的经验中混合了这些,所以你必须循环,通过handlerFunction找到触发器,然后删除 . 如果您有多个具有相同“运行”名称的触发器,则可能需要打破循环并获得更多创意 . 但以下对我有用 .

    function Delete() {
      var Triggers = ScriptApp.getProjectTriggers();
      for (var i = 0; i < Triggers.length; i++) {
        if (Triggers[i].getHandlerFunction() == "'Run' Name") {
          ScriptApp.deleteTrigger(Triggers[i])
        }
      }
    }
    

相关问题