firebase - 返回undefined的javascript对象

时间:2017-09-22 10:18:27

标签: javascript firebase firebase-realtime-database

我设置了一个firebase。这是结构:

enter image description here

我无法获得'newNroomID'值(即a6QVH,a7LTN等...)。 此值将用于与其他变量值进行比较。

我知道在javascript中,要访问对象的值,可以这样做:

var card = { king : 'spade', jack: 'diamond', queen: 'heart' }
card.jack = 'diamond'

但是当火灾基地出现时似乎有不同的故事,或者我确实错过了一些东西。这是我的代码。

var pokerRoomsJoin = firebase.database().ref(); // this is how i set it up this block of code is for reading the data only
pokerRoomsJoin.on('value', function(data){
    var rID = data.val();
    var keys = Object.keys(rID);
    var callSet = false;
    for (var i = 0 ; i < keys.length; i++) {
        var indexOfKeys = keys[i];
        var roomMatching = rID[indexOfKeys];
        var matchID = roomMatching.newNroomID; // this does not work alwaus give me undefined
        console.log('this return :' + matchID + ' WHY!')
        console.log(roomMatching)
        if(matchID == 'ffe12'){ // 'ffe12' is actually a dynamic value from a paramiter
            callSet = true;
        }
    }
})

,这是控制台日志的结果:

enter image description here

奇怪的是我能够像这样访问它

var matchID = roomMatching.newNroomID // it return a6QVH and a7LTN  one at a time inside the loop

仅当我将ref设置为:

var pokerRoomsJoin = firebase.database().ref('room-' + roomId);

我尝试过搜索,但似乎与我的结构不同。我的数据结构不好吗?让我摆脱这种痛苦,提前谢谢!

1 个答案:

答案 0 :(得分:0)

让我们逐行看到循环中的代码,

1.    var indexOfKeys = keys[i];

现在 indexOfKeys 会保留密钥 room-id

2.    var roomMatching = rID[indexOfKeys];

此处 roomMatching 将保留对象

{ 'firebasePushId': { newDealerName: 'b',
                  ...,
               }
}

现在

3.     var matchID = roomMatching.newNroomID;
  

这当然是未定义,因为roomMatching只有一个   property, firebasePushId

要访问newNroomID,您必须执行以下操作

matchID = roomMatching.firebasePushKey.newNroomID .

获取firebasePushKeys的一种方法是使用 Object.keys(roomMatching)