如何避免在“很抱歉,发生服务器错误”时DEADLINE_EXCEEDED。请稍等片刻,然后再试一次。

How to avoid DEADLINE_EXCEEDED when "We're sorry, a server error occurred. Please wait a bit and try again." happens?

提问人:Basj 提问时间:12/2/2020 最后编辑:TheMasterBasj 更新时间:12/4/2020 访问量:3145

问:

我读过类似的问题,例如“很抱歉,发生了服务器错误”的错误类型。请稍等片刻,然后重试。“和许多其他错误,但它们特定于其他类型的错误。


我有一个 Google Apps 脚本,它使用分钟计时器运行和处理 Gmail 电子邮件。

每天我都会通过电子邮件收到日志(见下面的屏幕截图#1)。问题是:We're sorry, a server error occurred. Please wait a bit and try again.

  • 没有发生错误的线路的报告,因此很难调试

  • 它时不时地随机发生,即使在这个精确的时间什么也没发生(没有电子邮件要处理),而且 99.9% 的时间,一切都没有错误。当没有要处理的电子邮件时,我不明白为什么此代码会失败:

      var mylabel = GmailApp.getUserLabelByName('emailstoprocess'); 
      var threads = mylabel.getThreads();
      for (var i = 0; i < threads.length; i++) {
          // do something
      }
    
  • 在我的脚本中,我不调用任何外部 API,只调用 Gmail API,并且没有耗时的循环(尤其是当没有新电子邮件时:脚本应该什么都不做)。我怎样才能控制这个错误(见下面的截图#2)?事实上,在仪表板页面中,我看到:.DEADLINE_EXCEEDEDExecutionsWe're sorry, a server error occurred: DEADLINE_EXCEEDED

如何避免此DEADLINE_EXCEEDED错误,即使我的脚本在失败时什么也没做?或者至少如何避免每天收到有关此的通知?

enter image description here

enter image description here

javascript google-apps-script gmail-api google-apps 截止日期

评论

0赞 Jose Vasquez 12/2/2020
当您单击“未知”右侧的 3 个点时,它是否会产生错误或显示触发器?
0赞 Tanaike 12/3/2020
虽然我不确定的细节,但从,如果在长度为 时出现错误,例如什么时候放在 的行之后,会得到什么结果?do somethingWhen there is no email to process, I can't see why this code can fail:threads0if (threads.length == 0) return;var threads = mylabel.getThreads();
0赞 Basj 12/4/2020
@JoseVasquez我尝试单击这 3 个点,但它没有提供更多信息。它是一个基于时间的触发器(每分钟一次),在 99.9% 的时间内工作而不会出错。就像他们的服务器一天有几次延迟,然后执行就延迟了......

答:

-1赞 Jose Vasquez 12/4/2020 #1

正如我所看到的,这是使用 V8 运行时发生的特定错误。根据所提供的信息,您可以使用 Rhino Runtime 来避免这些错误。这不是理想的解决方法,但没有更多信息需要调试。

更改为 Rhino Runtime

编辑你的清单文件(如果你使用的是新的脚本编辑器,请转到项目设置>在编辑器中标记显示“appsscript.json”清单文件),并将runtimeVersion更改为STABLEDEPRECATED_ES5,这意味着“将其更改为Rhino”。appscript.json

如果错误仍然存在

在这种情况下,这可能是 Google Apps 脚本中的问题,您应该按照建议将其发布到 Google 问题跟踪器上。

参考

体现

清单结构

评论

0赞 Waxim Corp 2/7/2023
对于未来的游客来说,这不再是一个好主意