1

私は一度作成するクエリを持ち、リスナを保持したくないので、手動トリガが送信されたときにデータが更新されます。addListenerForSingleValueEvent()で使用したときに古いデータセットを返すFirebase

だから私のクエリは次のようになります:

var ref = this.instance.child('/user/manish/today/events') 
    .orderByChild('endDateTime') 
    .endAt(endEventTime) 
    .limitToLast(10) 
    .addListenerForSingleValueEvent(this.previousEventListeners); 


    this.previousEventListeners = new com.google.firebase.database.ValueEventListener({ 
     onDataChange: (snapshot) => { 
     console.log("Value from native firebase access"); 
     console.dump(this.testing(snapshot.getValue())); 
     let result = { 
      value : this.testing(snapshot.getValue()), 
      type : "ValueChanged" 
     }; 
     console.dump(result); 
     }, 
     onCancelled: (databaseError) => { 
     console.log(databaseError.getMessage()); 
     hideActivtiyIndicator(); 
     } 
    }); 

それは、新しいレコードがクエリ条件と一致したことを添加しても、同じデータセットを返します。

ありがとうございました

+0

これは、ディスクの永続性を使用している可能性が最も高いです。 Firebaseのディスク永続性と 'addListenerForSingleValueEvent()'はうまく混ざりません。 http://stackoverflow.com/questions/34486417/firebase-offline-capabilities-and-addlistenerforsinglevalueevent/34487195#34487195を参照してください。 –

答えて

4

はい、私たちは自分のアプリでこの現象を経験しました。ディスク永続性を有効にした最新のデータが必要な場合は、単一の値を呼び出すだけでなく、すべてのイベント値の更新をサブスクライブする必要があります。この動作にもかかわらず、Firebaseは引き続き新しい価値のためにサーバーを呼び出すため、特に混乱します。

これについてFirebaseにサポートリクエストを提出し、期待された動作であると言いました。私はまた彼らがドキュメントを明確にすることを示唆したと彼らは言ったThanks for this comprehensive feedback. We do value this kind of inputs from the developers. This will be included in our feature request list and will be discussed with our engineers. Unfortunately, I can't share any timeline or definite details as this will be monitored internally.

状況を明確にすることを望む。価値のあることについては、FIRDatabaseReferenceカテゴリ(iOS、あなたのプラットフォームに適切なメタファーを使用する)でこれを対処し、追加機能を追加しました。それはSingleValueEventを呼び出し、500ms後にもう一度呼び出し、両方の値を呼び出し元に返します。 (コールバックは、呼び出し元がその間に遠ざかった場合に弱い参照を使用して取得されます。)500msは適切と思われます。ユーザーには表示のための即時の値が与えられ、オフラインまたはネットワークが遅い場合彼らが見るすべて。しかし、彼らがオンラインで、まともなネットワークアクセスを持っている場合、これはまもなく最新のデータを提供します。

関連する問題