javascript - 嵌套的 Firestore 侦听器以及如何取消订阅已创建的侦听器
问题描述
我想使用像这样的嵌套侦听器结构:
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
})
}
})
})
}
})
}
这是从react-native 中的 Nesting firestore onSnapshot listeners借来的片段?
我不确定如何最好地跟踪外部侦听器触发时创建的侦听器。创建新的内部侦听器时,如何取消订阅以前的内部侦听器?覆盖旧监听器的变量会取消订阅吗?IE
var unsubscribe = old_listener
unsubscribe = new_listener
// would this unsubscribe old listener?
如果没有,那么跟踪它们的好方法是什么?Frank 暗示使用一个有意义的列表,但我是 Javascript 初学者,不知道如何实现它。我可以将每个新侦听器附加到列表中,但是我如何将它们作为取消订阅的函数调用?
解决方案
我通过首先声明var unsub
为虚拟函数来解决这个问题。我使用unsub = () => {}
了返回未定义的。然后我声明我的外部侦听器,触发时将unsub
在分配unsub
给我的新内部侦听器之前调用,即unsub = firestore().collection(..).OnSnapshot()...
. 这样可以确保每次触发外部侦听器时,在附加新侦听器之前先分离先前的内部侦听器。
推荐阅读
- apache - SOLR 8.1.1 EdgeNGramFilterFactory 解析查询
- python - Pickle 不写入文件并且程序在 pickle.dump() 之后终止
- windows - 如何使用“type nul > filename.txt”创建宏?
- c++ - EXC_BAD_ACCESS Xcode 来自我在 Objective-C++ 中的 C++ 包装器和 Swift 桥接头
- reactjs - 更改语义 UI 组件的字体颜色
- coffeescript - main.coffee 文件中的 Require 语句无法正常工作
- python - Django 模型由于某种原因没有保存(在第二次运行函数后)
- javascript - 具有更多参数的函数,每个参数都在自己的括号中,向函数添加方法
- arrays - Athena:如何根据结构数组中的过滤索引获取值
- r - 在 R Linux 上使用 dyn.load 加载共享库时出现问题,但等效的 Windows 构建工作正常