我正在使用react-native-firebase ^ 3.1.1和react-native ^ 0.49.5。我的应用程序的用户具有对区域的可变权限。例如,用户A可能只拥有区域1的权限,而用户B可能拥有区域1,2和3的权限。当应用程序启动时,我设置快照侦听器以侦听对应于区域的文档的更改用户有权访问。由于没有逻辑OR,我必须为每个区域循环并设置一个快照监听器,如下所示
componentDidMount() {
let { territories } = this.props
territories.forEach(territory => {
this.unsubscribe.push(
firebase
.firestore()
.collection('dispatches')
.where('territory_id', '==', territory)
.onSnapshot(querySnapshot => {
const dispatches = []
querySnapshot.forEach(document => {
dispatches.push(document.data())
})
this.props.handleDispatchUpdate(territory, dispatches)
})
)
})
}
这似乎有效但我的应用程序在设置监听器时“冻结”。例如,如果用户尝试打开侧抽屉菜单或以任何方式与应用程序交互,则平均大约8秒或有时长达一分钟没有任何反应,那么所有操作似乎立即发生。
我添加了控制台日志语句,以检查是否是由于应用和firebase之间的网络时间造成的,如下所示
componentDidMount() {
let { territories } = this.props
territories.forEach(territory => {
console.log(`Starting read for territory item ${territories.indexOf(territory)}`, moment().format('hh:mm:ss'))
this.unsubscribe.push(
firebase
.firestore()
.collection('dispatches')
.where('territory_id', '==', territory)
.onSnapshot(querySnapshot => {
console.log(`Finished read for territory item ${territories.indexOf(territory)}`, moment().format('hh:mm:ss'))
const dispatches = []
querySnapshot.forEach(document => {
dispatches.push(document.data())
})
console.log(
`Storing documents in redux store for territory item ${territories.indexOf(territory)}`,
moment().format('hh:mm:ss')
)
this.props.handleDispatchUpdate(territory, dispatches)
})
)
})
}
结果如下记录为hh:mm:ss。有问题的用户有权访问3个地区
我不确定这是否与react-native-firebase包,firebase firestore本身或我如何设置多个侦听器的问题有关。任何帮助表示赞赏。