Firestore: ссылочный тип. Как дождаться всех вызовов get () каждого результата - PullRequest
0 голосов
/ 06 ноября 2018

Я получаю Observable Ticket []> из БД пожарного магазина, одно поле в билете имеет ссылочный тип.

Когда я подписываюсь на результаты, я использую:

 getTickets()
.subscribe(listOfTickets=> {  

     //loop the array
     listOfTickets.forEach(ticket => {

         ticket.personRef.get()  //this is the reference type field
         .then(res => { //getting information
            let person = res.data();
       }
     }         
     .... 
 }    

Как мне дождаться всех результатов:

ticket.personRef.get()

Я пытаюсь использовать forkJoin, но я все еще не понимаю, как это применить. Наблюдаемый listOfTickets имеет много результатов.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Спасибо, ваша помощь направила меня в правильном направлении, чтобы решить проблему с небольшими изменениями, вот окончательный код:

async someFunction() {
  getTickets()
  .subscribe(async listOfTickets => {
    const allTickets = [];
    var ticket = null;
    for (let i = 0; i < listOfTickets.length; i++) {

      await listOfTickets[i].personRef.get().then(snapshot => {
        ticket = snapshot.data();
      })

      allTickets.push(ticket);
    }
}
0 голосов
/ 06 ноября 2018

Не использовать forEach. Используйте for

  async someFunction() {
    getTickets().subscribe(async listOfTickets => {
      const allTickets = [];
        for (let i = 0; i < listOfTickets.length; i++) {
          await listOfTickets [i].personRef.get().then(snapshot => {
            return snapshot.data();
          }).then(ticket => {
            allTickets.push(ticket);
          })
        }
      console.log(allTickets);
    })
  }
...