【问题标题】:"We're sorry, a server error occurred. Please wait a bit and try again." when using DriveApp“很抱歉,发生服务器错误。请稍候,然后重试。”使用 DriveApp 时
【发布时间】:2015-04-06 19:21:33
【问题描述】:

我们有一个 Apps Script 应用程序是由 Google 表单的“提交表单”事件触发的。我们获取表单中收集的信息,并在复制预定义的 Google 文档模板后,将表单数据写入新创建的 Google 文档。在大多数情况下 - 这是可行的,但是有些日子(比如今天)有很多

“很抱歉,出现服务器错误。请稍候,然后重试。”

错误被抛出。它被抛出的代码行是:

var copy = template.makeCopy(title);
Utilities.sleep(4000);
return copy;

我相信我遵循了最佳实践,但使用了Utilities.sleep() 函数,但它似乎没有帮助。仅今天,我就看到这个错误至少出现了 15 次!令人沮丧的是,这并不一致。如前所述,该应用程序可以运行几天而没有错误,然后在其他日子我会收到一堆这些错误。

我在 2014 年 2 月看到一个 issue 登录,由我主演,但似乎没有任何解决方案。

请任何人指出我可以做些什么来停止看到该错误的正确方向?

【问题讨论】:

  • 代码确实工作的次数,运行需要多长时间?这个被复制的文件有多大?如果手动复制文件,是否需要很长时间?
  • 运行通常需要 2 到 3 分钟。过程是:1)获取正确的模板,2)制作模板的副本。 3)在副本中进行查找和替换,并用表格数据填写新副本 4)将填写表格的人作为编辑者添加到新副本中。 95% 的时间应用程序会在第 2 步抛出该错误 :( 所以这是一个简单的 DriveApp makeCopy() 调用,正如我之前提到的,它在 80% 的时间里都可以正常工作。我想不出这个 :(
  • 如果每个函数运行的副本不超过一个,并且数据不多,那么运行 2 或 3 分钟是很长的时间。您需要评估每行代码运行多长时间,并查看问题出在哪里。我想知道您的替换代码是否需要很长时间。

标签: google-apps-script google-drive-api google-forms


【解决方案1】:

看起来您正在使用DriveApp 制作副本。那挺好的。而不是使用:

return copy;

我会获取新文件的 ID,然后使用该 ID 打开文件。然后摆脱Utilities.sleep()。将 ID 放入全局对象中:

功能一:

//declared OUTSIDE of any function, so it's global
var objProjectInfo = {};

function fncOne() {

  var copy = template.makeCopy(title);
  var theCopyId = copy.getId();

  objProjectInfo['copyId'] = theCopyId;
}

功能二:

function fncTwo() {
  //Open the new file by ID
  var theIdToUse = objProjectInfo['copyId'];
  var theNewCopy = DriveApp.getFileById(theIdToUse);

  //Write data to new copy
  .... code ....
};

这摆脱了Utilities.sleep();它在使用之前显式打开新文件,因此此时不存在它是否存在的问题;它避免了使用return 语句传递数据。

【讨论】:

  • 谢谢桑迪 - 我会试试看!
  • 我尝试了您的建议,但我收到了相同的错误消息 - “很抱歉,发生服务器错误。请稍候,然后重试。” :(
  • 好的,谢谢你告诉我。好吧,我想这不是正确的答案!我已经看到了与代码运行时间或互联网连接无关的错误。问题是,您需要广泛调试所有相关代码以找出实际出了什么问题。这意味着从头开始,运行部分代码,然后再运行一点,再多一点。我经常在我希望代码结束的地方放入return; 语句,然后继续移动return; 语句。
猜你喜欢
  • 1970-01-01
  • 2017-05-02
  • 2013-11-02
  • 2020-12-07
  • 2021-01-21
  • 2014-05-21
  • 2021-03-14
相关资源
最近更新 更多