首页 > 解决方案 > 如何等待角度订阅

问题描述

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

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

非常感谢!

标签: javascriptangulartypescript

解决方案


async/await只能与Promises 一起使用。因此,要使其在您的示例中起作用,您必须将Observable(s) 更改为Promise(s)。

好消息是,您可以简单地使用toPromiseAPIObservable来执行此操作。

您必须做的另一件事是将您的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;
}

推荐阅读