Firestore:引用类型。如何等待evey结果的所有get()调用

问题描述 投票:0回答:2

我从firestore DB获取Observable Ticket []>,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有很多结果。

javascript firebase google-cloud-firestore fork-join reference-type
2个回答
0
投票

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

0
投票

谢谢,您的帮助指出了我正确的方向来解决问题,只需稍加改动,这是最终的代码:

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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.