Я не так много понимаю вопроса, но вам нужно кое-что понять о forkJoin и switchMap. SwitchMap полезно, когда вам нужно сделать два вызова один, в зависимости от ответа другого. Конструкция выглядит так:
callOne.pipe(
switchMap(resposeOfCallOne=>{
return callTwo(responseOfCallOne)
})
Если подписаться вы получили ответ callTwo
forkJoin, получите массив вызовов и вернете результат в массив
forkJoin([callOne,callTwo])
, еслиподписаться вы получили массив: res [0] имеет ответ callOne и res [1] ответ callTwo
Что ж, сначала преобразуйте ваши функции getCurrentValue и getDesiredValue1, чтобы вернуть наблюдаемые значения
getCurrentValue(eleName){
return this.helperService.getPointIdbyTags(this.existingObj, ['current',
'temp'], eleName)[0].pipe(switchMap((res:any)=>{
//we don't want "res" else the response of
return this.siteService.getHisPointData(ref, 'current')
.pipe(
map(this.helperService.stripHaystackTypeMapping),
)
};
}
getDesiredValue1(eleId){
return this.siteService.getScheduleParamsByRoomRef('temp and air and desired and
heating', eleId).pipe(
switchMap((a:any)=>{
let row = a;
let pointId = this.helperService.stripHaystackTypeMapping(row['id']).split(' ')[0];
return this.siteService.getHisPointData(pointId, 'current')
}))
Хорошо, когда у нас есть элемент, который мы хотим создать два вызова, мы будем использовать forkjoin
Мы хотим сделать, для элемента forEach создать два вызова, чтобы мы могли сделать
this.elements.forEach(element => {
forkJoin([this.getCurrentValue(element.name),this.getDesiredValue1(element.id)])
.subscribe(([current,desired])=>{
element.current=current;
element.desired=desired;
})
})
Я использую подписку ([текущий, желаемый]), но мы можем использовать res и использовать element.current = res [0], element.desired = res [1]
Если мы хотим, мы можем даже сделатьтолько одна подписка - теперь у нас так много подписок, как у элемента -
arrayOfCalls=[]
this.elements.forEach(element => {
arrayOfCalls.push(
forkJoin([this.getCurrentValue(element.name),this.getDesiredValue1(element.id)])
)
}
//then subscribe
arrayOfCalls.subscribe((fullRes:any[])=>{
fullRes.map((res,index)=>{
this.elements[index].currentValue=res[0]
this.elements[index].desiredValue=res[1]
})
})