2016-09-12 9 views
0

onDataChange()イベントのリスンを開始すると、ハンドラは値を受け取ります。この値は、以前にローカルに保存された値です。次に、即座にハンドラを2回呼び出して、クラウド上の正しい更新値を取得します。onDataChange()はリアルタイム値ではなくローカルスナップを取得します

ドキュメントは言う:

彼らはイベントの時点で存在しますが、指定されたパスに内容の静的なスナップショットを読み取るための機能を使用することができます。このメソッドは、リスナーがアタッチされると1回トリガーされ、子を含むデータが変更されるたびにトリガーされます。

「イベントの時点で存在したように」、 は、イベント発生時にはローカルでは存在しませんでした。

ローカルに保存されたものではなくリアルタイム値を取得したときにメソッドをトリガし、値が変更されるたびにトリガすることを期待しています。

再現方法:

  1. ロード既存のオブジェクトを経由して:

    onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world" 
    
  2. キルアプリケーションとの "Hello、再び世界" へFirebaseコンソール経由で値を変更します。私にはわからない「こんにちは、再び世界」

:待ちとハンドラがすぐに値を持つ後に再び呼び出されます

onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world" 
  • :経由

  • 再びロードオブジェクトこれがバグであるか、それが設計上のものであれば。

    これがデフォルトの動作であり、設計上の場合、値が最後に保存されたローカル値であるかどうかを知る方法はありますか?

  • 答えて

    1

    永続キャッシュに存在する値をリッスンすると、Firebaseクライアントはすぐにそのローカル値でイベントを発生させます。その後、サーバーと同期します。この結果、更新された値になった場合、クライアントは2番目の値イベントを発生させます。

    現在のところ、イベントがサーバーかローカルキャッシュから発生したかどうかを知る方法はありません。すべてのケースを満たすようにコードを設計するのが最善です。

    +0

    うわー、私は驚いて、肯定的な方法ではありません。 説明をありがとうございます。 開発元にデータの起源について通知する予定があるかどうか知っていますか?あるいは、その機能に投票できるどこかで? – GV3

    +1

    データがどこから来ているかを見ることができないということは、永続性機能のユースケースを制限することに気付いています。残念ながら、既存のクライアントを破棄することなく、現在のAPI内で簡単に変更できるものではありません。しかし、私たちはこれを将来的に改善しようとしています。いつものように:約束もタイムラインもない。現時点では、この動作に対応するようにアプリケーションを設計することをお勧めします。 –

    関連する問題