为什么基于时间的 GAS 触发器在 V8 中由于未知原因被禁用?

Tha*_*kon 6 triggers v8 google-sheets google-apps-script

我有(除其他外)以下四个功能。

  • fallback()
  • newSubmission()
  • installSubmissionTrigger()
  • uninstallSubmissionTrigger()

我有一个触发器:

  1. 在表单提交时运行。
  2. 调用fallback()将某些内容发布到电子表格以供审核。
  3. fallback来电installSubmissionTrigger()
  4. installSubmissionTrigger创建一个每分钟运行一次的基于时间的触发器。
  5. 触发器调用newSubmission().
  6. newSubmission做我想做的事情并打电话uninstallSubmissionTrigger()
  7. uninstallSubmissionTrigger删除基于时间的触发器。

所有这些使用 Rhino 都可以正常工作,但是当我启用 V8 时,基于时间的触发器在应该运行时会因未知原因而被禁用。

另外,当使用 V8 时,如果我installSubmissionTrigger()手动运行,触发器就会触发。
如果我fallback()手动运行,触发器也会触发。

触发器被禁用的未知原因可能是什么?

function fallback(event) {
  ...
  installSubmissionTrigger();
  ...
}

function newSubmission() {
  ...
  uninstallSubmissionTrigger();
  ...
}

function installSubmissionTrigger() {
  var properties = PropertiesService.getScriptProperties();
  if(!properties.getProperty("triggerID")) {
    var trigger = ScriptApp.newTrigger('newSubmission').timeBased().everyMinutes(1).create();
    properties.setProperty("triggerID", trigger.getUniqueId());
    Logger.log("Creating newSubmission trigger: " + trigger.getUniqueId());
  }
}

function uninstallSubmissionTrigger() {
  var properties = PropertiesService.getScriptProperties();
  properties.deleteProperty("triggerID");
  // Loop over all triggers.
  var allTriggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < allTriggers.length; i++) {
    // If the current trigger is the correct one, delete it.
    if (allTriggers[i].getHandlerFunction() === 'newSubmission') {
      ScriptApp.deleteTrigger(allTriggers[i]);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

用例示例:

  1. 客户提交新门报价请求。
  2. 然后他们还提交了一份报价请求,要求延长他们的房子的报价。
  3. 这扇门很可能是扩建的一部分,因此理想情况下,我们会将此请求发送给一家处理房屋扩建和门的公司。
  4. 但如果立即处理门请求,它可能会被发送给专门处理门的专家。

And*_*rte 4

您遇到的这个问题已被报告,它与 V8 运行时 [1] 有关。您可以使用DEPRECATED_ES5按预期工作的运行时版本。

[1] https://issuetracker.google.com/issues/150756612