"We're sorry, a server error occurred. Please wait a bit and try again." 使用 DriveApp 时

"We're sorry, a server error occurred. Please wait a bit and try again." when using DriveApp

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

"We're sorry, a server error occurred. Please wait a bit and try again."

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

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

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

我在 2014 年 2 月看到一个 issue 登录,我加了星标,但似乎没有任何解决办法。

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

看起来您正在使用 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 语句传递数据。