возвращаемое значение в карте слияния должно быть наблюдаемым. В приведенном выше коде рейтинг будет возвращен до завершения подписки, поэтому он будет работать с данными рейтинга, которые еще не были обновлены.
Я думаю, что вы хотите что-то вроде:
this.rankingObs = this.rankingService.getAll().pipe(
mergeMap(ranking => {
// an array of all observables which will return the merged rank and member data
const ranksWithMembers = ranking.map(rank=>{
return this.memberService.get(rank.key).pipe(
map(member=>{
return {
...rank,
firstName: member.firstName,
lastName: member.lastName,
keyName: member.key,
}
})
)
})
// does not emit until all observables in array emit. Emits all results.
return forkJoin(ranksWithMembers)
}),
).subscribe(...)