Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌应用程序脚本:时间触发器不可靠_Google Apps Script_Google Api_Google Apps - Fatal编程技术网

Google apps script 谷歌应用程序脚本:时间触发器不可靠

Google apps script 谷歌应用程序脚本:时间触发器不可靠,google-apps-script,google-api,google-apps,Google Apps Script,Google Api,Google Apps,是否允许在Google应用程序脚本中链接时间触发器,如下所示: function doGet(e){ //first invocation by user, HTTP GET if (e == null || e.parameters == null) { return ContentService.createTextOutput("EMPTY"); } saveGetParametersForUser(Session.getUser().getE

是否允许在Google应用程序脚本中链接时间触发器,如下所示:

 function doGet(e){   //first invocation by user, HTTP GET 
    if (e == null || e.parameters == null) {
      return ContentService.createTextOutput("EMPTY");
    }

    saveGetParametersForUser(Session.getUser().getEmail(), e);

    //trigger 10 seconds
    var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create();

 }


function timeDrivenEvent() { //runs until there are some data in ScriptDB
  Logger.log("INVOKED AT " + new Date());

  removeAllPreviousTriggers(); //removes old time triggers

  var somedata = loadTaskData({email: "" + Session.getUser().getEmail()});
  var remainingData = processTaskData(somedata);

    if(remainingData == null){
       return; //we are finished here
    } 

  removePreviousAndSaveRemainingTaskData(remainingData);

  var timeTrigger = ScriptApp.newTrigger("timeDrivenEvent").timeBased().after(10 * 1000).create();

}
  • 用户doGet()的第一次调用
  • 在处理所有数据之前,脚本以10秒的间隔调用自身(例如,处理2分钟,10秒什么都没有发生,然后再处理2分钟…)
  • 处理数据的大小约为几千字节,处理时间通常为1-2分钟
发生在我身上的事情是,有时脚本被中断,数据未被完全处理!我没有收到任何电子邮件通知,日志或执行记录中也没有任何内容-一切看起来都很好

我开始认为,也许10秒就可以很快启动脚本方法,但毕竟它在API中

有什么想法吗?
这是唯一可能的解决方案,因为Google应用程序脚本的运行时间不能超过5-6分钟(请参阅配额),所以如何将大任务分成小任务。

有一个周期性时间触发器可以很好地工作,正如评论中建议的那样

我只是想知道为什么时间触发链不起作用!我打破了谷歌应用程序脚本不喜欢的原则

文件:


方法everyMinutes将要创建的触发器设置为在以分钟为单位传递的时间间隔内触发,该时间间隔必须是1、5、10、15或30中的一个。

您每天将使用多少总处理时间?在开发期间,我每天至少运行20次脚本。。。这不超过1小时/天,这是免费谷歌应用程序的限制。我们确实有谷歌商务应用程序(更大的配额)。我担心每个脚本都会达到20个触发配额。您给出的代码正在重复创建触发器。所以也许你应该删除以前的触发器?那就是
ScriptApp.getProjectTriggers()
。检查处理程序函数是否为
“timeDrivenEvent”
,如果使用
ScriptApp.deleteTrigger()
,则将其删除。为什么不使用一个触发器,每5分钟触发一次,并在任务完成时将其删除?不一定,您可以在第一次调用时直接调用该函数,而不使用第二次调用的触发器(和下面的)调用将是“计时器触发”。让我们知道您在测试后的结果。感谢更新,很高兴知道它有帮助。这个新的解决方案带来了新的问题。我可能需要使用一些锁定,因为脚本有时可以同时运行两次(例如,当处理时间>1分钟时,脚本实例开始运行,因为我正在使用everyMinute(1).Google应用程序脚本给我带来了很多痛苦。您可以使用ScriptProperties中存储的标志来允许脚本仅在处理当前区块时运行-或者您可以使用5分钟的触发器来确保没有“重叠”。@MartinV。更好的可能是使用
LockService.getPrivateLock();