具有动态值

时间:2016-10-03 13:01:23

标签: javascript firebase firebase-realtime-database

我正在使用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()) 
    }) 
}

0 个答案:

没有答案