首页 > 解决方案 > 更新 Firestore 数据时间戳为空

问题描述

当我接受订单时,我有一个订单的实时监听器有一个名为“status”的字段更新,另一个字段被添加名为“datetime_accepted”

这是监听文档更改的监听器

db.collection('ORDERS').where('status', '==', 'a').orderBy('datetime_accepted')
  .onSnapshot(querySnapshot => {
    querySnapshot.docChanges().forEach(change => {
      if (change.type === 'added') {
        var id = change.doc.id
        var snapJSON = JSON.stringify(change.doc.data());
        var orderOBJ = JSON.parse(snapJSON);
        orderOBJ.oid = id;
        var confirm_datetime = new Date(orderOBJ.datetime_accepted.seconds*1000).toLocaleString();

这是我正在运行以更新字段的单独功能

db.collection("ORDERS").doc(id).update({
    "datetime_accepted": firebase.firestore.FieldValue.serverTimestamp(),
    "status": "a"
})

更改订单状态时发生错误,但刷新时间戳后再次正常工作此问题仅在时间戳中实时更新

在此处输入图像描述

标签: javascriptgoogle-cloud-firestoretimestamp

解决方案


这是预期的行为。有两件事要记住:

  1. 在文档实际到达服务器之前,服务器时间戳没有实际值
  2. Firestore 文档侦听器将在文档更改时立即触发,在文档到达服务器之前。

这意味着您的侦听器在更新到达服务器之前已接收到更新,并且该快照中不会有时间戳。

您的代码将需要通过处理未定义的时间戳值来检查这种特定情况。 阅读有关服务器时间戳如何工作的更多信息。


推荐阅读