使用JS访问节点中的Firebase数据

时间:2018-03-06 13:28:30

标签: javascript firebase firebase-realtime-database

所以我有一个从Firebase返回的对象,如下所示:

{key: {name: "test", email: "test", id: "test"}}

如何从这个对象中获取id?

如果我returnItem我得到了那个对象,所以我尝试returnItem[0]但它不是一个数组,我已经尝试了(Object.keys(tempSnap)但这只是给了我关键里面的对象。

这是我目前的代码:

export function sendInvitation(email) {
    firebaseRef.database().ref().child('users').orderByChild('email').equalTo(email).on("value", function(snapshot) {
        let tempSnap = snapshot.val();
        if(tempSnap != null) {
            console.log(tempSnap);
        }
    });
    return dispatch => firebaseRef.database().ref(`${userID}/invites`).push("This is a test Message!"); 
}

这是它输出的内容:

Returned Value

帮助很棒:D

2 个答案:

答案 0 :(得分:1)

如果您已经知道id并且它是一个文字,那么它就是returnItem.id的问题。

如果您已经知道id并且它是变量,那么它是returnItem[id]

如果您不知道密钥并想要打印所有密钥及其值,那就是:

Object.keys(returnItem).forEach(function(key) {
  console.log(key, returnItem[key]);
});

<强>更新

您的新代码显示了问题。对Firebase数据库执行查询时,可能会有多个结果。因此快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。您的回调需要通过使用snapshot.forEach()循环结果来处理它获取列表的事实:

firebaseRef.database().ref().child('users').orderByChild('email').equalTo(email).on("value", function(snapshot) {
  snapshot.forEach(function(child) {
    let tempSnap = child.val();
    console.log(tempSnap);
  });
});

答案 1 :(得分:1)

试试这个:

firebaseRef.database().ref().child('users').orderByChild('email').equalTo(email).on("value", function(snapshot) {
snapshot.forEach(function(child) {
    let keys=child.key;
    let ids=child.val().id;
      )};
   )};
你有:

 users
  keyid
   email:email
   name:yourname
   id: test