在循环中从公司ID角度解析公司名称

时间:2019-03-23 13:39:24

标签: angular typescript foreach rxjs

我是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()之类的其他建议。

2 个答案:

答案 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
          })
      }