2016-11-05 7 views
1

サーバタイムスタンプ付きのFirebaseプッシュがあります。ここでは、child_addedリスナーがすでにリスンしています。Firebase.ServerValue.TIMESTAMPは直ちに別の値を返しますchild_added

非常に驚くべきことに、child_addedイベントに返される値は、実際にはFirebaseデータベースノードに格納されている値と約300ms異なります。同じノードでの後続の読み取りは、ノードに格納されている「正しい」時間を提供します。プッシュが発生したときにトリガーされるのは、最初のchild_addedイベントだけです。つまり、間違った時刻が返されます。

誰でもこの問題を観察しましたか?

ref = new Firebase(/some/path); 
ref.on('child_added', function (childData) { 
    console.log('childData.pushTime = ' + childData.pushTime); 
}); 
ref.push({pushTime: Firebase.ServerValue.TIMESTAMP}); 

実際にはパスに保存されているものから〜300msの間にconsole.logの出力がオフになります。

答えて

1

予想される動作です。

ServerValue.TIMESTAMPの値を使用してローカル時刻とサーバークロックからのローカルクロックのオフセットを使用して決定されたchild_addedイベントがローカルで発生するために発生します。ただし、要求がサーバーに到着するまでの時間(つまりタイムスタンプが異なる)を考慮する必要はありません。

また、child_changedイベントを受信すると、書き込みが完了すると正しい時刻を含むスナップショットが発生します。

+0

私は以前にタイムオフセットもチェックしましたが、時間差は一致しませんでした。リクエストがサーバに到着するまでの時間についてのあなたの説明は、私が逃したものです。 これは、古いレコードと新しいレコードを比較するためにタイムスタンプと一致させる予定だったアルゴリズムを除外しています。一口! – Nat

+0

'child_changed'も聴くと、書き込みが完了すると正しい時刻を含むスナップショットで起動します。 – cartant

+0

誠に申し訳ありません。だから、間違った 'TimeStamp'を避ける簡単な方法は何でしょうか? 'onChildAdded 'for' TimeStamp 'は正確ではないので、私はちょうどこのようなプッシュをするときに' onChildChanged 'を使うべきですか? – Erik

関連する問題