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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firestore:引用类型。如何等待evey结果的所有get()调用相关的知识,希望对你有一定的参考价值。

我从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有很多结果。

答案

不要使用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);
    })
  }
另一答案

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

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);
    }
}

以上是关于Firestore:引用类型。如何等待evey结果的所有get()调用的主要内容,如果未能解决你的问题,请参考以下文章

基于引用数据类型的 Firebase Firestore 安全规则

使用 Swift (Firestore) 访问特定文档字段

如何让类中的初始化方法等待 Firestore 在 Swift 4 中完成?

异步等待 Firestore 用户 ID

如何正确调用等待?

解析 Firestore 引用