JavaScript数组不可编辑

JavaScript数组不可编辑,javascript,arrays,firebase,react-native,firebase-realtime-database,Javascript,Arrays,Firebase,React Native,Firebase Realtime Database,昨晚,我用一个简单的JavaScript数组遇到了一个非常奇怪的问题。我正在开发一个由Firebase支持的React原生应用程序,并使用SDK从实时数据库获取数据 代码如下: var app = this this.props.fb.auth().onAuthStateChanged(function(user) { if (user) { app.props.fb.database().ref('/users/' + user.uid

昨晚,我用一个简单的JavaScript数组遇到了一个非常奇怪的问题。我正在开发一个由Firebase支持的React原生应用程序,并使用SDK从实时数据库获取数据

代码如下:

    var app = this

    this.props.fb.auth().onAuthStateChanged(function(user) {
        if (user) {
            app.props.fb.database().ref('/users/' + user.uid + "/timeline").once('value').then(function(snapshot) {
                var posts = snapshot.val()
                return posts
            }).then((posts) => {                
                var statuses = [];
                for (i in posts) {

                    app.props.fb.database().ref('/posts/' + posts[i]).once('value').then(function(snapshot) {
                       statuses.push(snapshot.val())
                    });
                }

                console.log(statuses)
            })
        }

    });
上面的代码应该从每个用户的
时间线
中获取数据,迭代
时间线
上的每个
帖子
,然后从
帖子
中获取帖子的数据。然后,它简单地将数据推送到
状态
数组,该数组在最后被控制台记录

这就是控制台上显示的内容。

在展开阵列之前,控制台不会显示阵列中的项目。此外,当我尝试获取数组的
长度时,它返回0,并且我也无法遍历数组中的项


我做错了什么?

如果posts是一个可编辑的,我会研究使用q.all的某个版本,然后当所有承诺都得到解决时,您可以可靠地记录将所有这些部分推送到状态数组中的结果

一些伪代码:

if (user) {
        app.props.fb.database().ref(`/users/${user.uid}/timeline`)
        .once('value')
        .then(snapshot => snapshot.val())
        .then(posts => {                
            const statuses = [];

            const promises = Object.keys(posts).map(key => {
                return app.props.fb.database().ref(`/posts/${posts[key]}`).once('value')
                    .then(snapshot => statuses.push(snapshot.val()));
            }

            return Promises.all(promises)
        })
        .then(() => console.log(statuses));
    }

99/100 JS错误似乎是异步问题-这看起来是一样的。无法在控制台中登录由异步调用填充的数组。不应使用构造迭代数组。用。那怎么用?我是一个新手,所以如果你能给我举个例子,我会很有帮助的。。。似乎我们有承诺。所有工作->非常感谢!我还为您的代码添加了一些es6版本,使用模板字符串、箭头函数、自动返回语句使代码更加性感;)好东西!再次感谢:)