當我的基於實時API的應用程序遇到大量使用時,新用戶難以加載數據模型。在這種情況下用戶可以在其控制檯下列錯誤:如何處理未捕獲的java.lang.IllegalStateException:初始修訂已被設置?
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
...
凡堆棧跟蹤表示由實時API注入的代碼。
當現有用戶停止與數據交互一段時間時,新用戶可以按預期加載數據模型。
我傳遞了錯誤的功能負載調用 - 因爲它是在rtclient.RealtimeLoader.prototype.load
在realtime-client-utils.js
示例代碼谷歌提供的Quickstart documentation的一部分來完成。我的錯誤函數被稱爲一些錯誤;然而,這不是所謂的這個問題所關心的錯誤情況。
我的數據模型加載代碼應該如何讓用戶能夠在所有使用條件下使用我的應用程序?
Mayra建議只有當兩個用戶試圖同時初始化模型時纔會出現此錯誤;然而,這與我看到的行爲不符。爲了幫助獲得答案,我創建了一個可以重現問題的jsFiddle example。該示例僅基於快速入門頁面中提供的代碼,僅做了輕微的更改。
要重現該問題在三個瀏覽器標籤頁打開的jsfiddle例子,...
- 授權,如果你還沒有這樣做呢。
- 從第一個選項卡複製文件ID。
- 在第二個選項卡中按下
Switch File
按鈕並將文件ID粘貼到提示框中。 - 修改文本框中的文本並驗證更改是否在選項卡之間傳播......如果是這樣,則Realtime API按預期工作。
- 現在在兩個選項卡中按下
Create Data
按鈕即可將應用程序置於某種負載下。 (有些細節記錄在控制檯中) - 要在第三個選項卡中查看問題,請打開控制檯以查看日誌消息。
- 同樣在第三個選項卡中,將文件ID切換到其他兩個選項卡使用的相同ID。注意到第三個選項卡無法在指定的文件ID上協作,並看到我正在觀察的錯誤。
有趣的細節是初始化函數根本沒有被調用,只有一個用戶試圖在這種情況下初始化數據模型。