当我的基于实时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注入的代码。
当现有用户停止与数据交互一段时间后,新用户可以按预期加载数据模型。
我已将错误函数传递给加载调用 - 因为它是rtclient.RealtimeLoader.prototype.load
中realtime-client-utils.js
示例代码在Google Quickstart documentation中提供的示例代码。我的错误函数被调用了一些错误;但是,这个问题并不涉及错误案例。
我的数据模型加载代码应该是什么样的,以便用户能够在所有使用条件下使用我的应用程序?
Mayra建议只有当两个用户同时尝试初始化模型时才会出现此错误;但是,这与我看到的行为不符。为了帮助我得到答案,我创建了一个可以重现问题的jsFiddle example。该示例基于快速入门页面中提供的代码,只有很小的更改。
要重现此问题,请在三个浏览器选项卡中打开jsFiddle示例...
Switch File
按钮并将文件ID粘贴到提示框中。Create Data
按钮,将应用置于一定负载下。 (控制台中记录了一些细节)有趣的细节是初始化函数根本没有被调用,只有一个用户试图在这种情况下初始化数据模型。
答案 0 :(得分:2)
仅当两个用户尝试同时初始化新文档时才会发生这种情况。为了保证文档只被初始化一次,如果第二个用户尝试重新初始化已经初始化的文档,您将获得此异常。
正确的做法是在看到此异常时重新加载文档。然而,令人惊讶的是你经常看到这一点。
你在初始化函数中做了很多工作吗?您是否有一些设置,许多用户尝试同时加载相同的新文档?
答案 1 :(得分:1)
我没有足够的声誉留下评论 - 但我们也可以重复这个问题,而且不仅仅是在初始化时。它是完全可重现的,当一个用户试图打开一个文件(不是重新启动它,只是打开它)而另一个用户正在编辑它时发生。
捕获这个的问题是它似乎发生在一个单独的调用堆栈中,所以try / catch around gapi.drive.realtime.load根本无法捕获它。在加载中使用错误处理程序参数也不起作用,这个错误似乎没有引起注意