当我的基于 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 上进行协作,并看到我正在观察的错误。
有趣的细节是初始化函数根本没有被调用,在这种情况下只有一个用户试图初始化数据模型。