客户端之间的Firestore同步时间

时间:2018-10-01 13:01:00

标签: javascript reactjs time google-cloud-firestore momentjs

我在Firestore集合中具有此文档结构

{ message: 'hello world', time: 1538398128 }

使用此功能发布消息时,客户端设置时间值

moment().unix()

问题是我的客户有不同的时间,如果我按时间对文档进行排序,就像这个示例一样,则不一致

{ message: 'aaa', time: 1538398317 } // client 1 post at 14.00:00
{ message: 'bbb', time: 1538398257 } // client 2 post at 14:00:10

在客户端上,我在“ aaa”之前看到“ bbb”。 我该如何解决这个问题? 我知道存在firebase.firestore.FieldValue.serverTimestamp(),但是只有在发布文档后,它才能为我提供值,我无法在客户端上使用它。 谢谢

2 个答案:

答案 0 :(得分:0)

那么您将需要选择一个时区并将其用作标准的一致数据存储,否则每个客户端都将使用本地时区。您可能想使用momentjs的扩展名moment-timezone,在其中可以指定要使用的时区:https://momentjs.com/timezone/

答案 1 :(得分:0)

不可能随时间完美地同步不同的客户端设备(电话/浏览器),因为您没有机制来强制它们的时钟同步。

为确保顺序一致,您将需要使用firebase.firestore.FieldValue.serverTimestamp(),一旦提交,它将返回给客户端。等待期间,可以将客户端时间用作后备机制。更好的是,您可以联系某个时间服务器以验证本地时钟距离可用时钟没有太远。