【发布时间】:2018-04-06 09:36:53
【问题描述】:
昨晚我在一个简单的 JavaScript 数组中遇到了一个非常奇怪的问题。我正在开发一个由 Firebase 提供支持的 React Native 应用程序,并使用 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)
})
}
});
上面的代码应该是从每个用户的timeline获取数据,遍历timeline上的每个posts,然后从posts获取帖子的数据。然后它只是将数据推送到statuses 数组,该数组在最后被控制台记录。
在数组展开之前,控制台不会显示数组中的项目。此外,当我尝试获取数组的length 时,它返回 0,我也无法遍历数组中的项目。
我做错了什么?
【问题讨论】:
-
99/100 JS 错误似乎是异步问题 - 这看起来一样。您无法在控制台中登录由异步调用填充的数组。
-
您不应该使用
for..in构造迭代数组。使用Array.prototype.forEach()。
标签: javascript arrays firebase react-native firebase-realtime-database