嵌套的Firestore侦听器以及如何取消订阅已创建的侦听器 [英] Nested Firestore listeners and how to unsubscribe from created listeners

查看:40
本文介绍了嵌套的Firestore侦听器以及如何取消订阅已创建的侦听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用这样的嵌套侦听器结构:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆