Javascript .off()清除所有ref';s

Javascript .off()清除所有ref';s,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,当我在同一位置上有多个侦听器时,是所有侦听器都访问同一个本地缓存,还是每个侦听器都有自己的缓存“副本”?当我使用.off()删除其中一个侦听器时,缓存会发生什么情况?本地缓存是否会被删除并通过其他侦听器重新填充(因为它们仍在侦听更改) 我的理解是,所有侦听器都使用同一位置的本地缓存,但当我使用.off()时,只有侦听器及其代码被删除,但数据保留在内存中 var applyUpdate1 = function(snap) { //... }; var applyUpdate2 = functi

当我在同一位置上有多个侦听器时,是所有侦听器都访问同一个本地缓存,还是每个侦听器都有自己的缓存“副本”?当我使用
.off()
删除其中一个侦听器时,缓存会发生什么情况?本地缓存是否会被删除并通过其他侦听器重新填充(因为它们仍在侦听更改)

我的理解是,所有侦听器都使用同一位置的本地缓存,但当我使用
.off()
时,只有侦听器及其代码被删除,但数据保留在内存中

var applyUpdate1 = function(snap) {
  //...
};
var applyUpdate2 = function(snap) {
  //...
};

// Both sync data from the same location
var testRef1 = firebase.database().ref('test').on('value', applyUpdate1);
var testRef2 = firebase.database().ref('test').on('value', applyUpdate2);

// Will this delete the local memory?
// If so, what happens to testRef2, since it's using this local memory?
testRef1.off('value', applyUpdate1);

我也在上面修改了我对它的理解。我的假设正确吗?

如果多个侦听器正在观察同一位置,则数据只从服务器读取/同步一次,并且只在内存中保存一次


只要某个位置上有任何活动侦听器,该位置的数据就会保存在内存中。删除某个位置的最后一个活动侦听器后,该位置的数据将立即从内存中清除。

第一个问题的答案如下。我不明白你的第二个问题。这听起来像是一个更容易回答的问题,如果你为它显示的。谢谢弗兰克,我添加了最小的代码。我希望有帮助。我也为你的第二个问题添加了答案。