【问题标题】:How should I get the data from this object? [duplicate]我应该如何从这个对象中获取数据? [复制]
【发布时间】:2019-09-15 05:25:48
【问题描述】:

我应该如何从从 firebase 数据库快照创建的对象中获取“full_name”。

const profile_grabber = firebase.database().ref('PublicUserData').orderByChild('full_name');
var returnArr = [];

profile_grabber.once('value', function(snapshot) {
      snapshot.forEach(function(childSnapshot) {
        var item = childSnapshot.val();
        item.key = childSnapshot.key;
        returnArr.push(item);
      });
}).catch(function(error){
   console.log(error.code);
   console.log(error.message);
});

  console.log(returnArr);
  console.log(returnArr[0].full_name);

Console.log() 结果

//console.log(returnArr);

[] 0:{ 生日:“1996-05-23”, full_address: "地址 0", 全名:“乌达扬加”,…… }

1: { 生日:“1997-03-13”, full_address: "地址 4", 全名:“Akila Athauda”,… }

2: { 生日:“1996-10-18”, full_address: "地址 5", 全名:“查明杜米兰”,... }

3: { 生日:“1996-03-03”, full_address: "地址 1", 全名:“Dilshan Rajapaksha”,… }

4: { 生日:“1997-01-08”, full_address: "地址 2", 全名:“Gimhana Jayasekara”,... }

长度:5 原型:数组(0)

//console.log(returnArr[0].full_name);

未捕获的类型错误:无法读取未定义的属性“全名”

【问题讨论】:

  • 数据从 Firebase 异步加载。在加载数据时,您的主要代码会继续运行,这就是您的 console.log(returnArr[0].full_name); 运行并记录错误的时候。然后当数据可用时,调用您的回调并设置变量。 Chrome 在这里对你不利,一旦回调运行,就会动态更新来自 console.log(returnArr); 的输出。
  • 所有这意味着任何需要数据库数据的代码都必须在回调中,或者从那里调用。有关两者的示例,请在此处查看我的答案:stackoverflow.com/questions/40688268/… 和其他一些:stackoverflow.com/…
  • @FrankvanPuffelen 你是对的。太感谢了。我需要做的就是将其余代码放入 firebase 数据库快照回调函数中。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

试试这个:

var item = childSnapshot.val();
for(i in item){
console.log(item[i]['full_name']);
}

【讨论】:

  • 不会是item[i].full_name,因为它是一个数组,每个数组键中都有一个对象。
  • 方法 val() 返回一个数组。 firebase.google.com/docs/reference/js/…
  • 我已经尝试过了,它奏效了。但我确实将其余代码放在了 firebase 数据库快照回调函数中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2022-01-20
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多