onDataChange()
イベントのリスンを開始すると、ハンドラは値を受け取ります。この値は、以前にローカルに保存された値です。次に、即座にハンドラを2回呼び出して、クラウド上の正しい更新値を取得します。onDataChange()はリアルタイム値ではなくローカルスナップを取得します
ドキュメントは言う:
彼らはイベントの時点で存在しますが、指定されたパスに内容の静的なスナップショットを読み取るための機能を使用することができます。このメソッドは、リスナーがアタッチされると1回トリガーされ、子を含むデータが変更されるたびにトリガーされます。
「イベントの時点で存在したように」、 は、イベント発生時にはローカルでは存在しませんでした。
ローカルに保存されたものではなくリアルタイム値を取得したときにメソッドをトリガし、値が変更されるたびにトリガすることを期待しています。
再現方法:
ロード既存のオブジェクトを経由して:
onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world"
キルアプリケーションとの "Hello、再び世界" へFirebaseコンソール経由で値を変更します。私にはわからない「こんにちは、再び世界」
:待ちとハンドラがすぐに値を持つ後に再び呼び出されます
onDataChange(DataSnapshot dataSnapshot)... // value = "Hello world"
:経由
再びロードオブジェクトこれがバグであるか、それが設計上のものであれば。
これがデフォルトの動作であり、設計上の場合、値が最後に保存されたローカル値であるかどうかを知る方法はありますか?
うわー、私は驚いて、肯定的な方法ではありません。 説明をありがとうございます。 開発元にデータの起源について通知する予定があるかどうか知っていますか?あるいは、その機能に投票できるどこかで? – GV3
データがどこから来ているかを見ることができないということは、永続性機能のユースケースを制限することに気付いています。残念ながら、既存のクライアントを破棄することなく、現在のAPI内で簡単に変更できるものではありません。しかし、私たちはこれを将来的に改善しようとしています。いつものように:約束もタイムラインもない。現時点では、この動作に対応するようにアプリケーションを設計することをお勧めします。 –