2

简而言之,我们看到的是,如果我们创建一个新的实时文档并立即与另一个协作者共享它,并且该协作者在看到它显示在他们的“与我共享”文件夹中时加载实时文档,那么当该协作者尝试将数据写入文件时,会发生错误,有时实时 API 会静默失败。

通过以编程方式添加权限和使用 Google Drive 的共享对话框,我们已经能够重现这一点。以下是重现此错误的步骤。

  • 在不同的浏览器上登录两个不同的 Google 帐户
  • 在一个帐户中创建新的实时文档
  • 复制指向新文档的 URL
  • 通过输入电子邮件地址与其他帐户共享新创建的文档
  • 尝试尽快验证新文档是否显示在另一个帐户的“与我共享”文件夹中,并将复制的 URL 粘贴到另一个浏览器中以加载另一个帐户的文档(我能够重现该问题在我的机器上在 30 秒内执行此操作时始终如一,但如果至少有 35 秒的延迟,一切似乎都正常)
  • 为共享帐户加载文档时,尝试将数据写入文档
  • 有时实时 API 会静默崩溃
  • 如果对文档的写入使用复合操作,我们会收到以下错误:
  • Drive Realtime API 错误:invalid_compound_operation:在同步块结束时打开复合操作 - 您是否忘记调用 endCompoundOperation()?
  • 未捕获的 DocumentClosedError:文档已关闭。

与新协作者共享现有文件时也会出现此问题。在我的机器上进行测试时,这似乎是一个时间问题,因为我可以在等待不到 30 秒以加载共享文档时始终重现该错误,而当等待为 35 时我无法重现该问题秒或更长时间。另一个有趣的发现是问题似乎只出在写入数据上。我总是能够正确地从共享文档中读取数据,但是如果它是在 30 秒以下的情况下加载的,那么我第一次尝试写入数据时,就会出现问题。更令人好奇的是,如果页面被刷新,那么即使在文档被共享后的 30 秒内刷新也能正常工作。

谢谢。

4

1 回答 1

1

我不确定您的具体问题是什么,但是实时 API 很可能正在捕获您的 JS 中引发的错误,使其静默失败并跳过调用 endCompoundOperation。我建议打开 chrome 并启用“异常暂停”以捕获导致问题的原因,如此处所述(https://developers.google.com/chrome-developer-tools/docs/javascript-debugging?csw=1 #pause-on-exceptions)查看实际失败的原因。

于 2013-08-27T00:31:33.193 回答