首页 > 解决方案 > Firebase 实时数据库 + JS 对象

问题描述

我有一个非常简单的 JS 代码:

var worldRef = firebase.database().ref('something/something1');
var something = new Object();
worldRef.on('child_added', function(snap)  {
    something.id = snap.key;
    something.value = snap.val().value;
});
console.log(something);

它几乎可以正常工作 - 只有一个来自数据库的键和值,但它是一些东西。如果我修改它:

console.log(something.id);

不明确的。我试过用地图而不是对象,但一样。我在地图中看到了所有内容,但是当我尝试调用 getmap(key) 时,它是未定义的。

基于数组的解决方案:

var worldRef = firebase.database().ref('something/something1');
var something = [];
worldRef.on('child_added', function(snap)  {
  something.push ({
    id: snap.key,
    value: snap.val().value
  })
});
console.log(something);

有用。在此处输入图像描述

标签: javascriptfirebase

解决方案


这是因为每次添加孩子时,您都会重新分配对象的idvalue属性something

因为,该位置的每个初始子元素都会触发一次child_added事件(请参阅文档),最后您的对象只包含最后一个子元素。

如果您执行以下操作(为每个孩子创建一个新属性),您将看到与使用 Array 相同的效果:

var something = new Object();
worldRef.on('child_added', function (snap) {
   something[snap.key] = snap.val().value;
});

推荐阅读