我想使用这样的嵌套侦听器结构:
snapshotListeners() {
firestore()
.collectionGroup()
.where()
.onSnapshot({
error: //Handle error
next: firstSnapshot => {
firstSnapshot.docsChanges().forEach(change => {
//Data retrieved and used in the below query to get more data
firestore()
.collection()
.where() //using the data retrived from the above query here.
.onSnapshot({
error: //Handle error
next: secondSnapshot => {
secondSnapshot.docsChanges().forEach(change =>{
//More Data from second query
})
}
})
})
}
})
}
这是从Nesting firestore onSnapshot listeners in react-native?借来的代码段
我不确定如何最好地跟踪外部侦听器触发时创建的侦听器。创建新的内部侦听器时,如何取消订阅先前的内部侦听器?覆盖旧的侦听器变量会取消订阅吗?即
var unsubscribe = old_listener
unsubscribe = new_listener
// would this unsubscribe old listener?
如果没有,那么跟踪它们的好方法是什么?弗兰克(Frank)暗示使用一个有意义的列表,但我是Java语言的初学者,不确定如何实现它。我可以将每个新的侦听器添加到列表中,但是如何将它们作为取消订阅的函数调用?
答案 0 :(得分:1)
firestore.collection().onSnapshot()
将返回一个取消订阅的函数。声明取消订阅变量,然后将onSnapshot分配给它。
之后,您可以通过调用该函数来取消订阅。
例如,
const unsubscribe = firestore.collection("collection_name")
.onSnapshot(() => {
// call another snapshot or handle the snapshot data
});
完成后,只需取消订阅
unsubscribe();
中找到更多示例
答案 1 :(得分:1)
我通过首先将var unsub
声明为伪函数来解决此问题。我使用unsub = () => {}
返回未定义。然后,我声明我的外部侦听器,该外部侦听器在被触发后将调用unsub
,然后将unsub
分配给我的新内部侦听器,即unsub = firestore().collection(..).OnSnapshot()...
。这样可以确保每次外部侦听器触发时,在附加新的侦听器之前,先分离先前的内部侦听器。