Angular 如何在管道内调用forkJoin?

Angular 如何在管道内调用forkJoin?,angular,rxjs,rxjs-pipeable-operators,Angular,Rxjs,Rxjs Pipeable Operators,TL;博士 可以在可观察到的管道内使用forkJoin吗 完整故事: 我有一个服务,返回对象数组的可观察值。对于这些对象中的每一个,我都需要对返回一个可观察对象的服务进行另一次调用,并对每个结果应用另一个操作 op1 ->[] ----> op2 --> op3 \\-> op2 --> op3 \-> op2 --> op3 我目前的解决方案是: this.tournamentParticipantServi

TL;博士 可以在可观察到的管道内使用forkJoin吗

完整故事: 我有一个服务,返回对象数组的可观察值。对于这些对象中的每一个,我都需要对返回一个可观察对象的服务进行另一次调用,并对每个结果应用另一个操作

op1 ->[] ----> op2 --> op3
          \\-> op2 --> op3
           \-> op2 --> op3
我目前的解决方案是:

this.tournamentParticipantService.getNotAssigned(this.tournamentId).subscribe(
(玩家:玩家[])=>{
设dict={};
players.forEach(player=>{
dict[player.id]=this.teamService.add(
{ 
id:0,
成员:[],
锦标赛:这个,锦标赛,
姓名:player.name+“”+player.name
})
.烟斗(
地图((团队:团队)=>
this.teamMemberService.add({player:player.id,team:team.id})
))
});
forkJoin(dict.subscribe)(结果=>console.log(结果));
});
我想摆脱第一个订阅,改用管道。问题是,forkJoin的教程将其显示为对象或数组的输入源,而不是管道的一部分

从内部映射调用forkJoin

.pipe(
    map(value=>forkJoin(value))
返回我可能需要递归订阅的
可观察的
。似乎不是个好办法

在没有参数的管道中放置fJ

this.tournamentParticipantService.getNotAssigned(this.tournamentId.pipe)(
map((players:Player[])=>players.map(
(player:player)=>this.teamService.add({id:0,成员:[],锦标赛:this.tournamentId,name:player.name+“”+player.name})
.烟斗(
地图((团队:团队)=>{
let pipe=new JsonPipe();
日志(“团队:+pipe.transform(团队)+”玩家:+pipe.transform(玩家));
添加({player:player.id,team:team.id});
})))),
分叉连接
).订阅((结果:[[可观察])=>{
console.log(结果)
结果[0]。forEach(元素=>{
订阅(res=>console.log(res));
});
});
以奇怪的、纠结的可观测结构结束。这似乎也不是一个好办法


甚至可以从管道内部使用forkJoin吗?

我认为您缺少的是
forkJoin
将返回一个可观察的对象,因此标准的
map
不是您想要的:您需要使用其中一个映射,以适当的方式处理可观察的结果(即
开关映射
排气映射
合并映射
):


解决方案的最终形式是:`

this.tournamentParticipantService.getNotAssigned(this.tournamentId.pipe)(
map((players:Player[])=>players.map(
(player:player)=>this.teamService.add({id:0,成员:[],锦标赛:this.tournamentId,name:player.name+“”+player.name})
.烟斗(
地图((团队:团队)=>
this.teamMemberService.add({player:player.id,team:team.id}))
))),
mergeMap((任务:Observable[])=>forkJoin(任务)),
合并映射((任务:可观察[])=>forkJoin(任务))
).订阅(()=>{
这是loadTeams();
});
`

.pipe(
    switchMap(value => forkJoin(getThingOne(value), getThingTwo(value)))
.subscribe(([thing1, thing2]) => 
{

})
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) =>
          this.teamMemberService.add({ player: player.id, team: team.id }))
      ))),
  mergeMap((tasks: Observable<Observable<void>>[]) => forkJoin(tasks)),
  mergeMap((tasks: Observable<void>[]) => forkJoin(tasks))
).subscribe(() => {
  this.loadTeams();
});