【问题标题】:Firebase.ServerValue.TIMESTAMP returns different value on immediate child_addedFirebase.ServerValue.TIMESTAMP 在立即 child_added 上返回不同的值
【发布时间】:2016-11-05 22:01:23
【问题描述】:

我有一个带有服务器时间戳的 Firebase 推送,其中 child_added 侦听器已经在侦听。

非常令人惊讶的是,child_added 事件返回的值与 Firebase 数据库节点中实际存储的值相差约 300 毫秒。同一节点的后续读取提供了存储在节点上的“正确”时间。只有在推送发生时才触发的初始 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});

console.log 打印的内容与路径中实际存储的内容相差约 300 毫秒。

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    您看到的行为是预期的行为。

    发生这种情况是因为child_added 事件在本地触发,使用的ServerValue.TIMESTAMP 的值由本地时间和本地时钟与服务器时钟的偏移量确定。但是,无法考虑请求到达服务器所需的时间 - 因此时间戳不同。

    如果您还监听child_changed 事件,它会在写入完成后触发一个包含正确时间的快照。

    【讨论】:

    • 我之前也检查过时间偏移,但时间差不匹配。您对请求到达服务器所需时间的解释是我错过的。因此,这排除了我计划匹配时间戳以将旧记录与新记录进行比较的算法。叹息!
    • 如果您还收听child_changed,它将在写入完成后触发包含正确时间的快照。
    • 好答案谢谢。那么避免处理错误的“时间戳”的简单方法是什么?我应该在做这样的推送时总是使用“onChildChanged”吗,因为“TimeStamp”的“onChildAdded”不准确?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2013-11-02
    • 2010-12-17
    相关资源
    最近更新 更多