使用React和Firebase / Firestore将数据添加到嵌套的foreach数组

时间:2019-03-28 07:13:58

标签: reactjs firebase react-native promise google-cloud-firestore

使用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,
    });
  }

1 个答案:

答案 0 :(得分:2)

这是一个解决方案

fatal: remote origin already exists.

一旦您获得了所有响应,就调用一次setState。 希望这就是你想要的:)