gpt4 book ai didi

JavaScript 数组不可迭代

转载 作者:行者123 更新时间:2023-11-29 21:00:12 25 4
gpt4 key购买 nike

昨晚我在一个简单的 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 数组,该数组最后被控制台记录。

这是控制台上显示的内容。 enter image description here

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

我做错了什么?

最佳答案

如果 posts 是可迭代的,我会考虑使用 q.all 的某个版本,然后当所有 promise 都已解决时,您可以可靠地记录将所有这些部分推送到 statuses 数组的结果。

一些伪代码:

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));
}

关于JavaScript 数组不可迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46930001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com