Как получить данные из разных коллекций в firebase от реакции? - PullRequest
0 голосов
/ 09 мая 2019

Итак, у меня есть 2 коллекции

1 коллекция 'users'.Там у меня есть документы (объекты) со свойством 'profile', которое содержит строку.Это идентификатор профиля, который хранится в других «ролях» коллекции как документ.

Так что я пытаюсь получить эти данные, но безуспешно.Существует ли метод соединения или что-то в этом роде?Или я должен использовать обещание для получения данных из ролей сбора, а затем назначить их агенту?

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 голосов
/ 10 мая 2019

Для выполнения асинхронной операции над массивом объектов вы можете использовать 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 с полученными данными

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...