在应用程序的init中,我将流注册到存储在firestore中的文档之一。稍后我更新同一文档中的时间戳字段。我应该从流中获取一个回调,因为只有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() })
答案 0 :(得分:2)
由于使用了FieldValue.serverTimestamp()
,因此获得了两个回调。该值实际上是一个令牌,该令牌已发送到Firestore服务器,在那里确定时间戳,最后将其写入数据库。在客户端本地,在写入时尚不知道该值,但是,仍在本地缓存中写入文档。
您的监听器首先获取本地缓存写入(在知道时间戳之前),然后在知道时间戳之后再从服务器获取。如果对您很重要,您可以查看snapshot metadata来找出数据源。