我必须合并2种不同的http请求的结果:
Observable<ProjectDTO[]>
ItemsProject
这样我就收到了每个项目的项目计数器。DTO的
ProjectDTO {
name: string;
id: number;
}
ItemsProject {
idProject: number;
itemsCount: number;
}
在视图中,我只需要显示两件事:project name and items per project
。
我要做的是以下几点:
this.vlService.getProjects().pipe(
mergeMap(projects => {
this.projects = projects;
return forkJoin(
projects.map(project => {
const projectCount: ItemsProject = {
idProject: project.idProjects,
count: 0,
};
return this.vlService.getTotalItemsPerProject(projectCount);
})
);
})
)
.subscribe(result => {
console.log('VCOMP | result --> ', result)
});
它可以工作,但是结果是有一个数组ItemsProjects
。然后,我应更换ItemProject.idProject
的Project.name
。
结果,我想要一个像这样的项目数组:
ProjectCounter {
name: string;
items: number;
}
有没有更好的方法来实现这一目标?提前致谢
你可以尝试将项目本身传递到流中,这样你仍然可以在末尾访问该名称,并且不会破坏你的界面结构。
我还没有测试过,但是类似的东西应该可以工作:
this.vlService.getProjects().pipe(
mergeMap(projects => from(projects).pipe(
concatMap(project => forkJoin({
project: of(project),
items: this.vlService.getTotalItemsPerProject(projectCount).pipe(first())
})),
toArray()
))
).subscribe(result => {
console.log('VCOMP | result --> ', result)
});
这将导致带有project: ProjectDTO
和的对象数组items: ItemsProject[]
这很好!比你!