javascript - 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);
解决方案
这是因为每次添加孩子时,您都会重新分配对象的id
和value
属性something
。
因为,该位置的每个初始子元素都会触发一次child_added
事件(请参阅文档),最后您的对象只包含最后一个子元素。
如果您执行以下操作(为每个孩子创建一个新属性),您将看到与使用 Array 相同的效果:
var something = new Object();
worldRef.on('child_added', function (snap) {
something[snap.key] = snap.val().value;
});
推荐阅读
- javascript - 单击时如何在两个图像之间转换?
- kivy - Kivy:未知类
错误代码 - reactjs - 在渲染函数中的反应组件类中优化 var 处理
- javascript - 如何根据第一个数据列表选择链接 2 个数据列表
- javascript - 在 JS 中创建特定的实体(行)
- wix - 带有多个外部 msi 文件的 WiX BootStrapper
- jquery - 在特定区域 div 上切换类
- flutter - MethodChannel 是否会缓冲消息,直到另一端“连接”?
- c++ - C++有没有办法以同样的效率结合这个列表和映射?
- c# - 如何使 c# windows 窗体应用程序仅在单台 PC 上运行?