如何等待角订阅

时间:2018-10-04 19:49:28

标签: javascript angular typescript

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

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数组之前等待订阅?

非常感谢!

2 个答案:

答案 0 :(得分:0)

尝试一下:

'a string'

答案 1 :(得分:0)

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

好事是,您可以简单地在toPromise上使用Observable API。

您要做的另一件事是将fillOrderHeader函数声明为async。为此,您必须awaitthis.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;
}
相关问题