我正在使用endAt
过滤器过滤Firebase数据库数据,以获取子键值,如下所示:
database.ref('events').orderByChild('startTime').endAt(new Date().getTime()).on('value', (snapshot) => {
console.log('SNAPSHOT VALUE: ', snapshot.val())
})
但是,当事件节点处的数据发生更改时,endAt
过滤器仍使用oldDate().getTime()
,而不是当前的时间值。如果我更新回调函数中的变量并将其用作endAt
过滤器的值,它将在下次数据更改时使用该变量,在这种情况下,时间值将再次过时。 / p>
那么当有事件触发器时,如何在过滤器中使用当前时间?或者是我提取所有事件并在客户端中过滤它的唯一选择吗?
评论代码:
database.ref('events').orderByChild('startTime').on('value', (snapshot) => {
database.ref('events').orderByChild('startTime').endAt(new Date().getTime()).once('value', (snapshot) => {
console.log('SNAPSHOT VALUE: ', snapshot.val())
})
}
更新:每次事件树发生更改时,注释中的代码都可以用于实现新的过滤器侦听器。但为了提高效率,我需要在创建一个新侦听器之前在每个先前的侦听器上实现off()
。
更新2:不确定这是否有所改善,但我拒绝这样的老听众:
database.ref('events').orderByChild('startTime').on('value', (snapshot) => {
innerListener ? innerListener.off() : null
const innerListener = database.ref('events').orderByChild('startTime').endAt(new Date().getTime()).once('value', (snapshot) => {
console.log('SNAPSHOT VALUE: ', snapshot.val())
})
}