Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase.ServerValue.TIMESTAMP在添加的立即子项上返回不同的值_Firebase_Firebase Realtime Database - Fatal编程技术网

Firebase.ServerValue.TIMESTAMP在添加的立即子项上返回不同的值

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) {

我有一个带有服务器时间戳的Firebase推送,其中添加了一个
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”表示“时间戳”并不准确?