Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 首先完成从Firebase读取数据,然后执行其他操作_Javascript_Arrays_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 首先完成从Firebase读取数据,然后执行其他操作

Javascript 首先完成从Firebase读取数据,然后执行其他操作,javascript,arrays,firebase,firebase-realtime-database,Javascript,Arrays,Firebase,Firebase Realtime Database,所以我的问题是返回空数组是因为从Firebase读取数据还没有完成。我正在使用then方法,但它仍然执行then中的所有内容 var usersList = []; const ref = firebase.database().ref() ref.child('users').once('value').then(snap => { snap.forEach(childSnap => { const key = childSnap.key

所以我的问题是返回空数组是因为从Firebase读取数据还没有完成。我正在使用then方法,但它仍然执行then中的所有内容

var usersList = [];

const ref = firebase.database().ref()

ref.child('users').once('value').then(snap => {

    snap.forEach(childSnap => {

        const key = childSnap.key

        ref.child(`users/${key}/points`).on('value', function(snapper) {

            var points = snapper.val()

            usersList.push({uid: key, points: points})

        })

    })

}).then(function() {
    console.log(usersList)
})
使用
then()
本身并不是一个神奇的解决方案。您需要从回调中返回一个承诺,而您的代码没有这样做。在这种情况下,您只希望在加载所有用户后调用最终的
then()
,因此您需要返回一个承诺,该承诺只有在完成后才能解析

const ref = firebase.database().ref()

ref.child('users').once('value').then(snap => {
    var promises = [];

    snap.forEach(childSnap => {
        const key = childSnap.key
        promises.push(
            ref.child(`users/${key}/points`).once('value')
        );
    });

    return Promise.all(promises);
}).then(function(snapshots) {
    return snapshots.map(snapper => {
       var points = snapper.val()
       return {uid: key, points: points};
    })
}).then(function(usersList) {
    console.log(usersList)
})

这行似乎无效:
返回承诺。全部(承诺)
您能解释一下它的无效之处吗?这是一个语法错误,此行前缺少“)”。不过,我在运行脚本后收到此错误消息:
(节点:14560)UnhandledPromisejectionWarning:Unhandled Promisejection(拒绝id:1):ReferenceError:未定义键