我正在重复"键"来自Firebase,我没有找到任何涉及文档的内容。谁有这方面的经验可以传递为什么会发生这种情况的知识以及如何规避这个"错误"?
我刚刚创建了一个功能,以获取公司所包含的所有购物中心,之后通过这些购物中心获取他们的商品。但是"巴拉购物"正在重演。
CODE:
function searchAllMarkers(){
var markers = firebase.database().ref('/').child('aliansce');
var arrMarkers = [];
markers.on('child_added', function(snap){
arrMarkers = [...arrMarkers, snap.key];
console.log(arrMarkers);
for(m in arrMarkers){
console.log(arrMarkers[m])
var markers = firebase.database().ref('/aliansce/').child('' + arrMarkers[m] +'/marker/markerCoordinates/');
markers.on('child_added', function(snap){
console.log(snap.val());
});
}
});
}
答案 0 :(得分:1)
为每个子节点单独调用child_added
回调,因为barrashopping
一次,viapark
一次。
每次调用它时,都会将节点添加到数组中,然后使用console.log(arrMarkers[m])
记录数组。
child_added
触发barrashopping
,您的数组包含[barrashopping]
并且您记录barrashopping
。fires it's for
viapark , so you array now contains
[barrashopping,viapark] and you log
barrashopping,viapark`。您拥有的节点越多,使用当前代码打印barrashopping
的频率就越高。阻止这种情况的一种方法是收听value
事件,该事件会为符合您查询的所有子项触发一次:
function searchAllMarkers(){
var markers = firebase.database().ref('/').child('aliansce');
var arrMarkers = [];
markers.once('value', function(parent){
parent.forEach(function(snap) {
arrMarkers = [...arrMarkers, snap.key];
for(m in arrMarkers){
var markers = firebase.database().ref('/aliansce/').child('' + arrMarkers[m] +'/marker/markerCoordinates/');
markers.once('child_added', function(snap){
console.log(snap.val());
});
}
console.log(arrMarkers);
}
});
}