Firebase.ServerValue.TIMESTAMP在添加的立即子项上返回不同的值
我有一个带有服务器时间戳的Firebase推送,其中添加了一个Firebase.ServerValue.TIMESTAMP在添加的立即子项上返回不同的值,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我有一个带有服务器时间戳的Firebase推送,其中添加了一个child\u侦听器正在侦听 非常令人惊讶的是,返回给child_added事件的值与Firebase数据库节点中实际存储的值相差约300ms。在同一节点上的后续读取,提供存储在该节点上的“正确”时间。只有在推送发生时触发的初始子_added事件返回错误的时间 有人注意到这个问题吗 ref = new Firebase(/some/path); ref.on('child_added', function (childData) {
child\u
侦听器正在侦听
非常令人惊讶的是,返回给child_added
事件的值与Firebase数据库节点中实际存储的值相差约300ms。在同一节点上的后续读取,提供存储在该节点上的“正确”时间。只有在推送发生时触发的初始子_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打印的内容与路径中实际存储的内容相差约300ms。您看到的行为是预期的行为 这是因为添加的
child\u
事件是使用ServerValue.TIMESTAMP的值在本地激发的,该值是使用本地时间和本地时钟与服务器时钟的偏移量确定的。但是,无法计算请求到达服务器所需的时间,因此时间戳不同
如果您还收听child\u changed
事件,则写入完成后,它将触发包含正确时间的快照。我之前也检查了时间偏移,但时差不匹配。您对请求到达服务器所需时间的解释是我错过的。所以,这排除了我计划匹配时间戳以比较旧记录和新记录的算法。唉!如果您同时收听child\u changed
,则在写入完成后,它将启动一个包含正确时间的快照。回答正确,谢谢。那么,避免处理错误的“时间戳”的简单方法是什么呢?我是否应该在这样推送时总是使用“onChildChanged”,因为“onchildaded”表示“时间戳”并不准确?