我是angular和rxjs的新手,我想从数组中的company name
解析company id
。
我有以下格式的公司数据:
|---------------------|------------------|
| CompanyID | CompanyName |
|---------------------|------------------|
| 1234 | CompanyA |
|---------------------|------------------|
| 5678 | CompanyB |
|---------------------|------------------|
我的角度代码:
let items = [];
let companyIDs = [1234, 5678];
companyIDs.forEach(companyID => {
this.items.push({
compId: companyID,
compName: ??? <------- how to resolve the name from the companyID above?
})
});
我有一个返回RXJS observable
的服务,可让我解析company name
this.companyService.getCompanyName(1234).subscribe((companyName) => {
//return CompanyA
})
我如何使用companyService
来解析公司名称?
编辑:
我知道会有很多请求在循环中调用this.companyService.getCompanyName()
,欢迎使用诸如this.companyService.getCompanies()
之类的其他建议。
答案 0 :(得分:3)
如果您迭代自己的ID并为每个ID获得一个CompanyID,那么会有很多http请求。尽管如此,您可以采取以下措施使您的特定案例发挥作用:
companyIDs.forEach(companyId => {
this.companyService.getCompanyName(companyId)
.subscribe(compName => this.items.push({
compId: companyId, compName: compName
})
});
此方法的问题在于,您必须在每次迭代中提出一个服务请求,这意味着一个100 Id的数组将使其成为一个100 http请求,这与理想情况几乎没有什么关系。...
如果您可以进行httpCall来获取您问题中显示的表中ID和公司名称的整个表,例如this.service.getAllCompanies() // return all the company objects with { id, name }
,则可以进行该调用,然后进行遍历结果,使其成为一个简单的http请求。
答案 1 :(得分:1)
您可以这样做
items = [];
companyIDs = [1234, 5678];
FillItems(){
for(let i=0; i<this.companyIDs.length;i++){
this.getcompanyname(this.companyIDs[i]);
}
}
getcompanyname(companyid:number){
this.companyService.getCompanyName(companyid).subscribe((companyName) => {
this.items.push({
compId: companyid,
compName:companyName
})
}