Firebase.ServerValue.TIMESTAMP 在直接 child_added 上返回不同的值

标签 firebase firebase-realtime-database

我有一个带有服务器时间戳的 Firebase Push,其中 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 毫秒。

最佳答案

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

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

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

关于Firebase.ServerValue.TIMESTAMP 在直接 child_added 上返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40443662/

相关文章:

swift - 我可以改进我的 Firebase 结构吗?

ios - 更新照片后 Firebase Swift 崩溃

java - Android Firebase OnDataChange 未触发

ios - 无法完成提交 dSYM 当结构到 firebase 迁移以进行 crashlytics

node.js - 部署函数时Firebase语法错误

javascript - 删除所有元素的 Firebase 查询

ios - 尝试将用户电子邮件和姓名保存到 Firebase 数据库时出现异常

Firebase 规则通配符和子项比较

android - 将 Firebase 核心从版本 16 更新到 17 导致编译错误

java - FirebaseRecyclerAdapter DatabaseException : Can't convert object of type java. lang.String 输入帖子