Теперь в ES6 вы можете создавать ленивые кешированные свойства. При первом использовании свойство оценивает один раз, чтобы стать обычным статическим свойством. Результат: во второй раз пропущена служебная служебная функция.
Магия находится в геттере.
const foo = {
a: 5,
b: 6,
get c() {
delete this.c;
return this.c = this.a + this.b
}
};
В стрелочке геттер this
поднимает окружающий лексический охват .
foo // {a: 5, b: 6}
foo.c // 11
foo // {a: 5, b: 6 , c: 11}
вы можете сделать это
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
})
}
Это много http запросов, если вы повторяете свои идентификаторы и получаете для каждого ID компании. Тем не менее, это то, что вы можете сделать, чтобы ваш конкретный случай стал работать:
companyIDs.forEach(companyId => {
this.companyService.getCompanyName(companyId)
.subscribe(compName => this.items.push({
compId: companyId, compName: compName
})
});
проблема с этим подходом заключается в том, что вы должны делать запрос на обслуживание за одну итерацию, что означает, что массив из 100 Id сделал бы это для 100 HTTP-запроса, что не близко к идеалу ....
Если вы можете сделать httpCall, который получит всю таблицу идентификаторов и названий компаний в таблице, как показано в вашем вопросе ... например, this.service.getAllCompanies() // return all the company objects with { id, name }
, тогда вы можете сделать этот вызов, и ТО перебрать В результате получается простой http-запрос.