首页 > 解决方案 > 我可以在不取消订阅的情况下修改 QuerySnapshot 侦听器吗?

问题描述

假设我正在收听我bar收藏中foo小于 5 的所有项目。

let listener = db.collection("bar").where("foo", "<", 5).onSnapshot()

在一些用户输入之后,我实际上想收听foo小于 7的所有项目。
我可以修改我的监听器而不取消订阅它吗?

我知道我可以这样做listener(),然后使用设置一个新的侦听器.where("foo", "<", 7),但这意味着我将再次获取所有文档,因为这是侦听器的默认行为。我还可以使用设置第二个侦听器.where("foo", ">", 4).where("foo", "<", 7),然后合并结果。但是,如果用户不断更改标准,这将很快变得混乱。

是否有任何干净且可维护的解决方案?

标签: google-cloud-firestore

解决方案


我可以在不取消订阅的情况下修改我的听众吗?

不,这是不可能的。您将需要取消订阅,创建一个新的 Query 对象,然后订阅该新对象。要么,要么订阅这两个查询并决定你想对任何重复的文档做什么。


推荐阅读