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サンプル コードで行われているように、load 呼び出しにエラー関数を渡しました。私のエラー関数は、いくつかのエラーに対して呼び出されます。ただし、この質問が関係しているエラーの場合は呼び出されません。

ユーザーがすべての使用条件下でアプリを使用できるようにするには、データ モデルの読み込みコードはどのようにすればよいですか?

Mayra は、このエラーは 2 人のユーザーが同時にモデルを初期化しようとした場合にのみ発生するべきだと提案しました。ただし、これは私が見た動作と一致しません。答えを得るのを助けるために、問題を再現できるjsFiddle の例を作成しました。この例は、クイックスタート ページで提供されているコードに基づいており、わずかな変更のみが加えられています。

問題を再現するには、jsFiddle の例を 3 つのブラウザ タブで開き、...

  • まだ承認していない場合は承認します。
  • 最初のタブからファイル ID をコピーします。
  • 2 番目のタブでSwitch Fileボタンを押し、ファイル ID をプロンプト ボックスに貼り付けます。
  • テキスト ボックス内のテキストを変更し、変更がタブ間で反映されていることを確認します...そうであれば、Realtime API は期待どおりに動作しています。
  • Create Data両方のタブのボタンを押して、アプリに負荷をかけます。(一部の詳細はコンソールに記録されます)
  • 3 番目のタブで問題を確認するには、コンソールを開いてログ メッセージを表示します。
  • また、3 番目のタブで、ファイル ID を他の 2 つのタブで使用されているものと同じ ID に切り替えます。3 番目のタブが指定されたファイル ID で共同作業できず、私が観察しているエラーが表示されることを確認します。

興味深い詳細は、初期化関数がまったく呼び出されず、このシナリオでデータ モデルを初期化しようとしているユーザーが 1 人だけであることです。

4

2 に答える 2

1

コメントを残すほどの評判はありませんが、この問題を繰り返すこともできます。これは初期化時だけではありません。これは完全に再現可能であり、別のユーザーがファイルを編集しているときに、あるユーザーがファイルを開こうとした場合に発生します (ファイルを再初期化するのではなく、単に開くだけです)。これはJSコンソールのスクリーンショットです

これをキャッチする際の問題は、別の呼び出しスタックで発生しているように見えるため、gapi.drive.realtime.load を try/catch してもキャッチするのにまったく役立ちません。ロードでエラーハンドラー引数を使用しても機能しません。このエラーは見過ごされているようです

于 2013-05-20T12:53:38.253 に答える