Угловое разрешение названия компании из идентификатора компании в цикле - PullRequest
1 голос
/ 23 марта 2019

Я новичок в 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 для определения названия компании?


Edit: Я знаю, что будет много запросов, вызывающих this.companyService.getCompanyName() в цикле, любые другие предложения, такие как использование this.companyService.getCompanies(), приветствуются.

Ответы [ 2 ]

3 голосов
/ 23 марта 2019

Это много запросов http, если вы итерируете свои идентификаторы и получаете для каждого идентификатор компании.Тем не менее, это то, что вы можете сделать, чтобы ваш конкретный случай заработал:

companyIDs.forEach(companyId => {
    this.companyService.getCompanyName(companyId)
        .subscribe(compName => this.items.push({
             compId: companyId, compName: compName 
    })
});

проблема с этим подходом заключается в том, что вы должны делать запрос на обслуживание за одну итерацию, что означает, что массив из 100 идентификаторовсделал бы это для HTTP-запроса 100, что не близко к идеалу ....

Если вы можете сделать httpCall, который получит всю таблицу идентификаторов и названий компаний в таблице, как показанов вашем вопросе ... например, this.service.getAllCompanies() // return all the company objects with { id, name }, тогда вы могли бы сделать этот вызов, и ТО перебрать результат, сделав его простым http-запросом.

1 голос
/ 23 марта 2019

вы можете сделать так

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
          })
      }
...