如何从React获得Firebase中不同集合的数据?

时间:2019-05-09 17:07:51

标签: javascript reactjs firebase google-cloud-firestore

所以我有2个收藏

1个集合为“用户”。我有具有属性“配置文件”的文档(对象),其中包含字符串。它是配置文件的ID,作为文档存储在其他集合“角色”中。

所以我正在尝试获取此数据,但没有成功。是否存在连接方法或类似方法?还是我必须使用promise从集合角色获取数据,然后将其分配给代理?

async componentDidMount() {
    firebase
      .firestore()
      .collection('users')
      .orderBy('lastName')
      .onSnapshot(async snapshot => {
        let changes = snapshot.docChanges()

        const agents = this.state.agents
        for (const change of changes) {
          if (change.type === 'added') {
            const agent = {
              id: change.doc.id,
              ...change.doc.data()
            }

            await firebase
              .firestore()
              .collection('roles')
              .doc(change.doc.data().profile).get().then( response => {
                //when i get response i want to set for my object from above this val 
                agent['profile'] = response.data().profile
                //after that i want to push my 'agent' object to array of 'agents'
                agents.push(agent)
                console.log(agent)
                }
              )
          }
        }

        this.setState({
          isLoading: false,
          agents: agents
        })
      })
  }

1 个答案:

答案 0 :(得分:0)

要对对象数组执行异步操作,您可以使用promise.all,我在下面给出了一个示例,该示例类似于您必须进行多次异步操作的用例

  const all_past_deals = await Promise.all(past_deals.map(async (item, index) => {
     const user = await Users.get_user_info(item.uid);

    const dealDetails = await Deals.get_deal_by_ids(user.accepted_requests || []);

    const test = await Users.get_user_info(dealDetails[0].uid);
return test
 }))

 }

这样,您可以从一次api调用中获取数据,并使用获取的数据进行其他api调用