我是否可以在不立即呈现更改的情况下更新Firestore文档?

问题描述 投票:0回答:2

我有一个功能,可以让用户赞成某些内容。内容按upvotes的顺序排序。目前,如果用户赞成某些内容,然后其内容比之前显示的内容更多,则内容的顺序将立即发生变化(因为我使用的是实时Firestore数据库)。

有没有办法阻止这种情况发生?除非用户刷新页面,否则我希望订单保持不变。

angular typescript firebase google-cloud-firestore
2个回答
1
投票

听起来你正在使用Firestore's realtime mode,它会在数据发生变化时调用onSnapshot方法。从文档:

db.collection("cities").doc("SF")
    .onSnapshot(function(doc) {
        console.log("Current data: ", doc.data());
    });

Cloud Firestore也有一个简单的reads the data once方法。您可以使用它只显示一次数据,或者保持对数据读取时间的完全控制。来自文档:

docRef.get().then(function(doc) {
    if (doc.exists) {
        console.log("Document data:", doc.data());
    }
})

2
投票

有没有办法阻止这种情况发生?除非用户刷新页面,否则我希望订单保持不变。

是的,您可以通过两种方式防止这种情况。第一种方法是停止使用Firestore's realtime updates featureget the data only once。如您所见,如果您只是使用get()调用,这可能是可能的。

根据有关CollectionReference的onSnapshot()函数的官方文档:

为QuerySnapshot事件附加侦听器。可以通过调用onSnapshot被调用时返回的函数来取消侦听器。

所以第二种方法是继续使用实时更新功能,但不再需要remove the listener了一次。

© www.soinside.com 2019 - 2024. All rights reserved.