我在尝试从 firebase 调用中循环一些记录时尝试进行一些数据处理时遇到问题。在循环中,我正在调用 firebase 来检索数据,然后我想用它来更新对象数组中的元素。我提供了以下方法的简化版本,其中展示了该问题。
在这个例子中,如果新值不存在,我想将新值插入到数组中,然后调用 firebase 来检索新数据,更新数组元素。
最后,我只是执行一个 console.log 来遍历应该创建的新数组以输出新值。但是,当代码运行时,什么也没有显示,就好像数组还没有创建一样。
如果我只是这样做,console.log(newArray)它会显示带有数据的元素。
但我的问题是,我需要进一步处理这些元素newArray……而它在代码中不存在。
我尝试将整个循环包装在一个Promise.all[]调用中,并使用该.then()方法循环遍历newArray元素,但这不起作用。
这看起来应该很容易,但我遗漏了一些必须与来自 firebase 的异步响应相关的东西。
TestArrayUpdates = () => {
namestoInsert = [
{ name: 'Bob', score: 5 },
{ name: 'Jim', score: 10 },
{ name: 'steve', score: 15 }
];
newArray = [];
let dayscore = 0;
namestoInsert.map((el, i) => {
let idx = newArray.findIndex(item => item.name == el.name);
if (idx == -1) {
firebase
.database()
.ref('userscoresbyday')
.child('2019-Aug-30')
.child('bgmd0r5HyZViLQZBynXUSm9e9Ab2')
.once('value', snap => {
if (snap.exists()) {
dayscore = snap.val().score;
}
})
.then(() => {
newscore = el.score + dayscore;
newArray.push({ name: el.name, score: newscore });
});
}
});
newArray.map((el, i) => {
console.log(el.name);
});
};
我希望输出是名称列表。什么都不显示。
相关分类