JavaScript Firebase:查询快照始终为空

时间:2017-09-04 20:08:53

标签: javascript firebase

无论我做什么,我似乎无法找到一种方法来访问孩子" onSite",当我记录snapshot.val()时显示为存在,但我不能弄清楚如何访问它。

代码:

firebase.database().ref().child("users").orderByChild('facebook_id').equalTo(fbID).once("value").then(function(snapshot) {
    console.log(snapshot.val());
    console.log(snapshot.child("onSite").val());
});

以下是回复: enter image description here

它不应该为空,它应该是假的。我不能做孩子(" 4mUUjF ......")。孩子(" onSite")。val()因为我不知道ID是什么在查询之前。使用每个循环不起作用,它只循环通过第一级,即ID。

2 个答案:

答案 0 :(得分:2)

使用对象的键

获取快照val,然后使用Object.keys方法找到密钥。这将允许您进入快照。一旦到达那里,就像访问任何其他对象一样简单。

firebase.database().ref().child("users").orderByChild('facebook_id').equalTo(fbID).once("value").then(function(snapshot) {
    let snap = snapshot.val();
    let key = Object.keys(snap)[0]
    console.log(snap[key].onSite);
})

答案 1 :(得分:2)

对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。

您的代码需要使用Snapshot.forEach()

来处理列表
firebase.database().ref().child("users").orderByChild('facebook_id').equalTo(fbID)
.once("value").then(function(result) {
    result.forEach(function(snapshot) {
        console.log(snapshot.val());
        console.log(snapshot.child("onSite").val());
    });
});
相关问题