我的问题很简单...考虑以下角度方法:

fillOrderHeader() {
    let rows3:Array<OrderHeader>= new Array<OrderHeader>();
    this.orderService.getAllOrdersHeaders().subscribe(headerList=>{
      headerList.forEach(headerDoc=>{
        headerDoc.get().subscribe(header=>{
          let headerMetadata:OrderHeader= new OrderHeader();
          headerMetadata.clientName= header.data().clientName;
          headerMetadata.agencyName=header.data().agencyName;
          rows3.push(headerMetadata);
        });
      })
    });
    return rows3;
  }


如何在返回row3数组之前等待订阅?

非常感谢!

最佳答案

async / await仅适用于Promise。因此,要使其在您的示例中起作用,您必须将Observable更改为Promise

不错的是,您可以简单地在toPromise上使用Observable API来执行此操作。

您要做的另一件事是将您的fillOrderHeader函数声明为async。为此,您必须await调用this.orderService.getAllOrdersHeaders().toPromise()headerDoc.get().toPromise()

尝试这个:

async fillOrderHeader() {

  let rows3: Array<OrderHeader> = new Array<OrderHeader>();
  const headerList = await this.orderService.getAllOrdersHeaders().toPromise();

  for(let headerDoc of headerList) {

    const header = await headerDoc.get().toPromise();

    let headerMetadata: OrderHeader = new OrderHeader();
    headerMetadata.clientName = header.data().clientName;
    headerMetadata.agencyName = header.data().agencyName;

    rows3.push(headerMetadata);
  }
  return rows3;
}

09-30 22:24