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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我是否可以在不立即呈现更改的情况下更新Firestore文档?相关的知识,希望对你有一定的参考价值。

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

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

答案

听起来你正在使用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());
    }
})
另一答案

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

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

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

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

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

以上是关于我是否可以在不立即呈现更改的情况下更新Firestore文档?的主要内容,如果未能解决你的问题,请参考以下文章

在不更改版本号的情况下更新 android 应用

是否可以在不刷新整个页面的情况下刷新包含的 Django 模板?

是否可以在不下载整个对象的情况下更改 S3 对象上的标头?

是否可以在不替换的情况下以编程方式修改/更新 plist 文件?

是否可以在不从原始源重新索引的情况下更改 Solr 架构中指定的分析器?

我们可以在不更改 APP 版本的情况下更新 Google Play Store 上的 APK