.off()清除所有ref的缓存?

时间:2018-01-14 10:41:44

标签: javascript firebase firebase-realtime-database

当我在同一个位置有多个侦听器时,所有侦听器都会访问相同的本地缓存,还是每个侦听器都有自己的缓存“副本”?当我使用.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);

我也修改了我对它的理解。我的假设是否正确?

1 个答案:

答案 0 :(得分:2)

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

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