Javascript 不带'的缓存;在';订阅

Javascript 不带'的缓存;在';订阅,javascript,firebase,Javascript,Firebase,是否可以告诉firebase缓存路径而不进行“打开”订阅 目前我正在做以下工作,这既低效又浪费空间,而且很难看: 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', snapsh

是否可以告诉firebase缓存路径而不进行“打开”订阅

目前我正在做以下工作,这既低效又浪费空间,而且很难看:

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事件侦听器可能会解决您的问题。在这种情况下,您将在附加侦听器时传递一个no-op块,并在整个代码中使用
ref.once('value',…)
。通过附加带有no op块的初始侦听器,对
ref.once(…)
的所有子序列调用都将使用本地缓存,而不需要访问网络。

Ok。不,是的。如果能有一个更务实的方法来做这件事就好了。