背景
现状
通过下面的代码,我可以处理上面的上下文。
this.http$.get<IWishResponse[]>(environment.apiUrl + 'wish/' + wishID)
.pipe(
map(wishResponse => wishResponse[0]),
switchMap(wishResponse => this.peopleService.getPersonById(wishResponse.receiver).pipe(
switchMap(personResponse => this.convertWishResponse(wishResponse, personResponse) )
)),
)
问题
虽然我有一个可以运行的代码,但感觉这种问题的代码太多了。我想做什么:
将所有这些逻辑组合在一个开关映射中而不是嵌套开关映射?现在感觉像很多多余的代码...
最重要的是,我想通过改进上面的代码来更多地了解 RXjs。 谢谢你帮我...
答案 0 :(得分:1)
您可以通过 pluck 拉平链并使用 map
传递第一个 api 结果,并且由于您正在发出两个相关的异步请求,因此您无法真正将两个 switchMap
合并为一个。
this.http$.get<IWishResponse[]>(environment.apiUrl + 'wish/' + wishID)
.pipe(
map(wishResponse => wishResponse[0]),
switchMap(wishResponse => this.peopleService.getPersonById(wishResponse.receiver).pipe(map(person=>[person,wishResponse])),
switchMap(([personResponse,wishResponse]) => this.convertWishResponse(wishResponse, personResponse) ))