3

当我的基于 Realtime API 的应用程序使用量很大时,新用户很难加载数据模型。在这种情况下,用户会在他们的控制台中看到以下错误:

Uncaught java.lang.IllegalStateException: Initial revision has already been set. 
Ry index.html:705
Vx index.html:134
T index.html:900
bb index.html:399
Pf index.html:462
Sf index.html:982
(anonymous function) index.html:490
Kh api:152
W.Ga api:151
...

堆栈跟踪表示由 Realtime API 注入的代码。

当现有用户在一段时间内停止与数据交互时,新用户能够按预期加载数据模型。

我已将错误函数传递给加载调用——正如Google 作为快速入门文档rtclient.RealtimeLoader.prototype.load的一部分提供的realtime-client-utils.js示例代码中所做的那样。我的错误函数因某些错误而被调用;但是,对于这个问题所涉及的错误情况,并不要求这样做。

我的数据模型加载代码应该是什么样子才能让用户能够在所有使用条件下使用我的应用程序?

Mayra 建议仅当两个用户尝试同时初始化模型时才会出现此错误;但是,这与我看到的行为不符。为了帮助获得答案,我创建了一个可以重现问题的jsFiddle 示例。该示例基于 Quickstart 页面中提供的代码,仅进行了少量更改。

要重现该问题,请在三个浏览器选项卡中打开 jsFiddle 示例,然后...

  • 如果您还没有这样做,请授权。
  • 从第一个选项卡复制文件 ID。
  • 在第二个选项卡中,按下Switch File按钮并将文件 ID 粘贴到提示框中。
  • 修改文本框中的文本并验证更改是否在选项卡之间传播...如果是这样,实时 API 正在按预期工作。
  • 现在按下Create Data两个选项卡中的按钮,使应用程序处于一定的负载下。(一些细节记录在控制台中)
  • 要在第三个选项卡中查看问题,请打开控制台以查看日志消息。
  • 同样在第三个选项卡中,将文件 ID 切换为其他两个选项卡使用的相同 ID。观察到第三个选项卡无法在指定的文件 id 上进行协作,并看到我正在观察的错误。

有趣的细节是初始化函数根本没有被调用,在这种情况下只有一个用户试图初始化数据模型。

4

2 回答 2

2

只有当两个用户尝试同时初始化一个新文档时才会发生这种情况。为了保证文档只被初始化一次,如果第二个用户试图重新初始化一个已经初始化的文档,你会得到这个异常。

正确的做法是在看到此异常时重新加载文档。但是,令人惊讶的是,您经常看到这种情况。

你在初始化函数中做了很多工作吗?您是否有一些设置让很多用户尝试同时加载相同的新文档?

于 2013-05-04T17:15:59.393 回答
1

我没有足够的声誉来发表评论 - 但我们也可以重复这个问题,而且不仅仅是在初始化时。它是完全可重现的,当一个用户尝试打开一个文件(不是重新初始化它,只是打开)而另一个用户正在编辑它时会发生这种情况。这是JS控制台的截图

捕捉它的问题是它似乎发生在一个单独的调用堆栈中,所以尝试/捕捉 gapi.drive.realtime.load 根本无助于捕捉它。在加载中使用错误处理程序参数也不起作用,这个错误似乎没有被注意到

于 2013-05-20T12:53:38.253 回答