我的问题很简单...考虑以下角度方法:
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;
}