使用Firestore时,我有一些嵌套调用。有了它们,它们依赖于.then()的使用,因为它们是网络调用。它们似乎太嵌套了,以致于它们无法访问我要更新的称为“消息”的列表。
由于这种混乱,我在循环的每次迭代中都更新状态,这简直是无效的。
如何以此为起点将消息推送到消息数组?:
顺便说一句,此方法onCollectionUpdate绑定在我的构造函数中,例如this.onCollectionUpdate = this.onCollectionUpdate.bind(this)。谢谢!
onCollectionUpdate = querySnapshot => {
const messages = [];
querySnapshot.forEach(doc => {
const { _id, text, createdAt, user } = doc.data();
var userId = user.id
var userRef = firebase.firestore().collection('users').doc(userId)
userRef.get().then(data => {
var user = data.data()
var userObject = {
_id: userId,
name: user.name,
avatar: user.profilePictureURL
}
var newMessage = {
_id,
text,
createdAt: new Date(createdAt.seconds),
user: userObject
}
this.setState(prevState => ({messages: [...prevState.messages,newMessage]}))
messages.push() //Not working. By time it reaches set state below (outside of the loops) it is empty.
})
})
this.setState({
messages,
loading: false,
});
}
答案 0 :(得分:2)
这是一个解决方案
fatal: remote origin already exists.
一旦您获得了所有响应,就调用一次setState。 希望这就是你想要的:)