猿问

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

我在尝试从 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);

    });

};

我希望输出是名称列表。什么都不显示。


holdtom
浏览 136回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答