admin管理员组文章数量:1332889
my question is very simple... Consider the following angular method:
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;
}
How to await to subscription before to return a row3
array?
Many thanks!
my question is very simple... Consider the following angular method:
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;
}
How to await to subscription before to return a row3
array?
Many thanks!
Share Improve this question asked Oct 4, 2018 at 19:49 AlejoDevAlejoDev 3,19811 gold badges40 silver badges67 bronze badges 2-
1
You need to convert the observable to a promise, there is an rxjs operator for this, and await the result. Then use
await
instead of the.subscribe
. – Aluan Haddad Commented Oct 4, 2018 at 19:53 - @AluanHaddad Ok, how?... Many thanks! – AlejoDev Commented Oct 4, 2018 at 19:55
2 Answers
Reset to default 5async
/await
can only work with Promise
s. So to make it work in your example, you'll have to change your Observable
(s) into Promise
(s).
Good thing though is, you can simply use the toPromise
API on an Observable
for doing that.
Another thing that you'll have to do is declare your fillOrderHeader
function as async
. To do that you'll have to await
the calls to this.orderService.getAllOrdersHeaders().toPromise()
and headerDoc.get().toPromise()
Try this:
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;
}
try this:
async fillOrderHeader() {
let rows3: Array<OrderHeader>= new Array<OrderHeader>();
let headerList = await this.orderService.getAllOrdersHeaders().toPromise();
for(let headerDoc of headerList){
let 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;
}
本文标签: javascriptHow to await a subscribe in angularStack Overflow
版权声明:本文标题:javascript - How to await a subscribe in angular - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742303364a2449431.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论