2013-05-03 27 views
3

當我的基於實時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.loadrealtime-client-utils.js示例代碼谷歌提供的Quickstart documentation的一部分來完成。我的錯誤函數被稱爲一些錯誤;然而,這不是所謂的這個問題所關心的錯誤情況。

我的數據模型加載代碼應該如何讓用戶能夠在所有使用條件下使用我的應用程序?

Mayra建議只有當兩個用戶試圖同時初始化模型時纔會出現此錯誤;然而,這與我看到的行爲不符。爲了幫助獲得答案,我創建了一個可以重現問題的jsFiddle example。該示例僅基於快速入門頁面中提供的代碼,僅做了輕微的更改。

要重現該問題在三個瀏覽器標籤頁打開的jsfiddle例子,...

  • 授權,如果你還沒有這樣做呢。
  • 從第一個選項卡複製文件ID。
  • 在第二個選項卡中按下Switch File按鈕並將文件ID粘貼到提示框中。
  • 修改文本框中的文本並驗證更改是否在選項卡之間傳播......如果是這樣,則Realtime API按預期工作。
  • 現在在兩個選項卡中按下Create Data按鈕即可將應用程序置於某種負載下。 (有些細節記錄在控制檯中)
  • 要在第三個選項卡中查看問題,請打開控制檯以查看日誌消息。
  • 同樣在第三個選項卡中,將文件ID切換到其他兩個選項卡使用的相同ID。注意到第三個選項卡無法在指定的文件ID上協作,並看到我正在觀察的錯誤。

有趣的細節是初始化函數根本沒有被調用,只有一個用戶試圖在這種情況下初始化數據模型。

回答

2

這應該只發生在兩個用戶同時嘗試初始化新文檔時發生。爲了保證文檔只被初始化一次,如果第二個用戶試圖重新初始化一個已經初始化的文檔,你會得到這個異常。

正確的做法是在看到此異常時重新加載文檔。然而,你很經常看到這一點令人驚訝。

你在初始化函數中做了很多工作嗎?你有一些設置,很多用戶試圖同時加載同一個新文檔嗎?

1

我沒有足夠的聲望留下評論 - 但我們也可以重複這個問題,而且這不僅僅是在初始化時。它是完全可重現的,當一個用戶試圖打開一個文件(而不是重新初始化它,只是打開)而另一個用戶正在編輯它時會發生。 Here's a screenshot of the JS console

捕捉這個問題似乎發生在一個單獨的調用棧中,所以try/catch around gapi.drive.realtime.load並沒有幫助捕獲它。在加載中使用錯誤處理參數也不起作用,這個錯誤似乎沒有被注意到

相關問題