为了账号安全,请及时绑定邮箱和手机立即绑定

如何在调用 firebase 检索数据的循环中处理/更新数组

如何在调用 firebase 检索数据的循环中处理/更新数组

holdtom 2021-09-30 15:04:07
我在尝试从 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);    });};我希望输出是名称列表。什么都不显示。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信