Javascript 密钥在firebase上重复

Javascript 密钥在firebase上重复,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我从Firebase获得了重复的“密钥”,我没有找到任何与文档相关的内容。在这方面有经验的人谁能传授知识,知道为什么会发生这种情况,以及如何避免这种“错误” 我刚刚创建了一个函数来获取公司包含的所有购物中心,然后通过每个购物中心获取他们的lat lng。但“巴拉购物”正在重演 代码: function searchAllMarkers(){ var markers = firebase.database().ref('/').child('aliansce'); var ar

我从Firebase获得了重复的“密钥”,我没有找到任何与文档相关的内容。在这方面有经验的人谁能传授知识,知道为什么会发生这种情况,以及如何避免这种“错误”

我刚刚创建了一个函数来获取公司包含的所有购物中心,然后通过每个购物中心获取他们的lat lng。但“巴拉购物”正在重演

代码:

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());
            });

        }

    });  
}

添加的
child\u
回调将分别为每个子节点调用,因此对
barrashopping
调用一次,对
viapark
调用一次

每次调用它时,您都会将节点添加到一个数组中,然后使用
console.log(arrmakers[m])
记录该数组

  • 第一次添加
    child\u
    barrashopping
    激发时,您的数组包含
    [barrashopping]
    ,您可以记录
    barrashopping
  • 第二次'child_added
    viapark
    触发,因此您的数组现在包含
    [barrashopping,viapark]
    ,您可以登录
    barrashopping,viapark`
  • 节点越多,使用当前代码打印
    的频率就越高。防止这种情况发生的一种方法是侦听
    事件,该事件对与查询匹配的所有子级触发一次:

    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);
          }
        });  
    }
    

    我已经试过了,但是它仍然重复这个键的“key”和“val()”。是的,日志仍然在错误的地方。现在修好了。但我也建议您在代码中设置一个断点,并对其进行一次或两次单步检查,以查看它是如何流动的,以及打印的内容。理解调试器中发生的事情要比让别人在这里告诉你要容易得多。