没有 'on' 订阅的缓存

Cache without 'on' subscription

是否可以告诉 firebase 在没有 'on' 订阅的情况下缓存路径?

目前我正在做的事情既低效又丑陋space:

const ref = new Firebase(someUrl)

app.get('slow/:id', (req, res) => {
  ref.child(id).on('value', snapshot => res.send(snapshot.val()))
})

const cache = {}

ref.on('child_added', snapshot => cache[snapshot.key()] = snapshot.val())
ref.on('child_changed', snapshot => cache[snapshot.key()] = snapshot.val())
ref.on('child_removed', snapshot => delete cache[snapshot.key()])

app.get('fast_wasteful_ugly/:id', (req, res) => {
  const val = cache[req.params.id]

  if (val !== undefined)
    res.send(val)
  else
    ref.child(req.params.id).once('value', snapshot => res.send(snapshot.val()))
})

简短的回答是 - 目前没有办法告诉 Firebase 在不附加事件侦听器的情况下将数据缓存在路径中。

就是说,考虑一下您要解决的问题。如果您想同步访问存储在 Firebase 中的数据,那么您上面提到的方法是目前最好的方法。

但是,如果您只想避免网络往返来检索数据,那么在您希望保持缓存的位置附加一个 Firebase 事件侦听器可能会解决您的问题。在这种情况下,您将在附加侦听器时传递一个无操作块,并在整个代码中使用 ref.once('value', ...) 。通过将初始侦听器附加到无操作块,您对 ref.once(...) 的所有子序列调用都将使用本地缓存,而不需要访问网络。