微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RXjs:将 2 个开关映射合并为 1 个?

如何解决RXjs:将 2 个开关映射合并为 1 个?

背景

现状

通过下面的代码,我可以处理上面的上下文。

 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。 谢谢你帮我...

解决方法

您可以通过 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) ))   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。