云功能中的Firebase时间戳不显示时间

时间:2019-11-13 10:45:36

标签: firebase firebase-realtime-database timestamp firebase-admin

我正在使用它来获取时间戳

admin.database.ServerValue.TIMESTAMP

但是在日志中,通过控制台变量获取该信息

{ '.sv': 'timestamp' }

任何人都可以帮助我。

实际上我想获取时间戳,然后将其与数据库时间戳进行比较

1 个答案:

答案 0 :(得分:2)

admin.database.ServerValue.TIMESTAMP不包含实际的服务器端时间戳,而只是一个标记(您看到的{ '.sv': 'timestamp' })。数据库服务器在写操作中识别出该标记,然后将服务器端时间戳写入其位置。

这意味着如果不写入数据库就无法获取服务器端时间戳。查看如何获得此结果的简单方法是:

let ref = firebase.database().ref("test");
ref.on("value", function(snapshot) {
  console.log(snapshot.val());
})
ref.set(admin.database.ServerValue.TIMESTAMP)

运行此代码时,您的日志将显示三个值:

  1. null

    这是将侦听器附加on("value"时数据库中的当前值。在这里,我假设test节点尚不存在,所以值将为null

  2. 1573659849577

    这是客户端在执行ref.set(...)语句时做出的估计。因此,客户端估计其认为服务器时间戳可能是什么,并触发value事件。您可以使用它来立即更新UI,这样用户不必等待。

  3. 1573659859162

    这是服务器实际写入数据库,然后发送回客户端的值。因此,这是您要查找的实际服务器端时间戳。

从理论上讲,客户端估计值(2)和服务器端值(3)可能相同,在这种情况下,您将不会获得第三个事件。但实际上我从未见过,因为它们总是至少相隔几毫秒。

相关问题