javascript - 如何等待角度订阅
问题描述
我的问题很简单......考虑以下角度方法:
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
s 一起使用。因此,要使其在您的示例中起作用,您必须将Observable
(s) 更改为Promise
(s)。
好消息是,您可以简单地使用toPromise
APIObservable
来执行此操作。
您必须做的另一件事是将您的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;
}
推荐阅读
- r - 在函数中使用 with() 更新列表不会返回更新后的输出
- arrays - All_else method (Ruby)
- javascript - string.length 是否在调用 string.length 时计算长度
- python - Python Pandas 按顺序计算多索引中唯一对的出现次数
- python - 为什么我得到的每个通道的填充输入大小小于内核大小?
- deployment - Vercel 和 Pythonanywhere | 在域和子域上分别部署前端和后端
- r - 如何在 R 中对原始平稳和转换后的平稳时间序列进行格兰杰测试?
- c# - 使用 CefSharp 访问没有打开 URL 的个人资料
- python - Python - 让用户输入一个连接的字符串
- android - 展开/折叠组 RecyclerView 标题