嵌套的Firestore侦听器以及如何取消订阅已创建的侦听器 [英] Nested Firestore listeners and how to unsubscribe from created listeners
问题描述
我想使用这样的嵌套侦听器结构:
I want to use a nested listener structure like this one:
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
})
}
})
})
}
})
}
这是从>在响应本机中在快照侦听器上嵌套firestore的片段吗?
我不确定如何最好地跟踪外部侦听器触发时创建的侦听器.创建新的内部侦听器时,如何取消订阅先前的内部侦听器?覆盖旧的侦听器变量会取消订阅吗?即
I am unsure how best to keep track of the listeners created when the outer listener fires. How can I unsubscribe the previous inner listener when a new inner listener is created? Would overwriting an old listener's variable unsubscribe it? i.e
var unsubscribe = old_listener
unsubscribe = new_listener
// would this unsubscribe old listener?
如果没有,那么跟踪它们的好方法是什么?弗兰克(Frank)暗示使用一个有意义的列表,但我是Java语言的初学者,不确定如何实现它.我可以将每个新的侦听器添加到列表中,但是如何将它们作为取消订阅的函数调用?
If not, then what's a good way to keep track of them? Frank hints at using a list which makes sense but I'm a Javascript beginner and not sure how to implement it. I can append each new listener to a list but how would I then call them as a function to unsubscribe?
推荐答案
我通过首先将 var unsub
声明为伪函数来解决此问题.我用 unsub =()=>{}
返回未定义.然后,我声明我的外部侦听器,该外部侦听器在被触发时将调用 unsub
,然后将 unsub
分配给新的内部侦听器,即 unsub = firestore().collection(..).OnSnapshot()...
.这样可以确保每次外部侦听器触发时,在附加新的侦听器之前,先分离先前的内部侦听器.
I solved this by first declaring var unsub
as a dummy function. I used unsub = () => {}
which returns undefined. I then declare my outer listener which when triggered will call unsub
before assigning unsub
to my new inner listener, i.e. unsub = firestore().collection(..).OnSnapshot()...
. This ensures that each time the outer listener triggers, the previous inner listener is detached before attaching a new listener.
这篇关于嵌套的Firestore侦听器以及如何取消订阅已创建的侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!