Firestore文档流和更新

时间:2020-02-19 16:14:42

标签: firebase google-cloud-firestore

在应用程序的init中,我将流注册到存储在firestore中的文档之一。稍后我更新同一文档中的时间戳字段。我应该从流中获取一个回调,因为只有1个更新。

但是,我收到2个回调-

  1. 更新后的字段为空
  2. 更新的字段具有正确的更新值的地方

有什么想法吗?

 CollectionReference collectionReference = FIRESTORE.collection("users");
 if(streamSub == null) {
  streamSub = collectionReference.document(documentID).snapshots().listen((onData){
    onData.data.forEach((k,v) => debugPrint(k + " = " + v.toString()));
  });
 }

//Update field
Firestore.instance
    .collection("users")
    .document(documentID)
    .updateData({"Time" : FieldValue.serverTimestamp() })

1 个答案:

答案 0 :(得分:2)

由于使用了FieldValue.serverTimestamp(),因此获得了两个回调。该值实际上是一个令牌,该令牌已发送到Firestore服务器,在那里确定时间戳,最后将其写入数据库。在客户端本地,在写入时尚不知道该值,但是,仍在本地缓存中写入文档。

您的监听器首先获取本地缓存写入(在知道时间戳之前),然后在知道时间戳之后再从服务器获取。如果对您很重要,您可以查看snapshot metadata来找出数据源。