TL; DR Можно ли использовать forkJoin внутри канала наблюдаемой?
Полная версия: У меня есть служба, которая возвращает Observable массива объектов.Для каждого из этих объектов мне нужно будет сделать еще один вызов службы, которая возвращает наблюдаемую, и применить еще одну операцию к каждому из результатов.
op1 ->[] ----> op2 --> op3
\\-> op2 --> op3
\-> op2 --> op3
Мое текущее решение таково:
this.tournamentParticipantService.getNotAssigned(this.tournamentId).subscribe(
(players: Player[]) => {
let dict = {};
players.forEach(player => {
dict[player.id] = this.teamService.add(
{
id: 0,
members: [],
tournament: this.tournamentId,
name: player.name + " " + player.surname
})
.pipe(
map((team: Team) =>
this.teamMemberService.add({ player: player.id, team: team.id })
))
});
forkJoin(dict).subscribe(result => console.log(result));
});
Я бы хотел избавиться от первой подписки и использовать трубу.Проблема состоит в том, что учебники для forkJoin показывают его как источник, в который передается объект или массив, а не как часть канала.
Вызов forkJoin из внутренней карты
.pipe(
map(value=>forkJoin(value))
возвращает Observable<Observable<resolved forkJoin arguments>>
на которую мне, вероятно, нужно будет подписаться рекурсивно.Кажется, это не очень хороший способ.
Помещение fJ в трубу без аргументов
this.tournamentParticipantService.getNotAssigned(this.tournamentId).pipe(
map((players: Player[]) => players.map(
(player: Player) => this.teamService.add({ id: 0, members: [], tournament: this.tournamentId, name: player.name + " " + player.surname })
.pipe(
map((team: Team) => {
let pipe = new JsonPipe();
console.log("team: " + pipe.transform(team) + " player: " + pipe.transform(player));
this.teamMemberService.add({ player: player.id, team: team.id });
})))),
forkJoin
).subscribe((result: [[Observable<void>]]) => {
console.log(result)
result[0].forEach(element => {
element.subscribe(res => console.log(res));
});
});
заканчивается странной запутанной структурой наблюдаемых.Это также не кажется хорошим способом.
Возможно ли даже использовать forkJoin изнутри трубы?