如何在RxJS第二个switchMap返回两个响应对象并在subscribe中消费
实现方案
你可以在第二个switchMap中调用B服务后,通过map操作符将A、B两个服务的响应包装为一个对象向下传递,就能在subscribe中同时访问两个结果,且能保留原始的类型定义:
.pipe( switchMap(x => this.clientService.A()), filter(firstResp => Helpers.IsNotNull(firstResp)), switchMap(firstResp => { // 调用B服务后,将A和B的响应打包返回 return this.clientService.B(firstResp.someProp).pipe( map(secondResp => ({ serviceARes: firstResp, serviceBRes: secondResp })) ) }), ).subscribe(({ serviceARes, serviceBRes }) => { // 此处可直接访问两个服务的响应,类型与服务返回类型完全匹配 console.log('服务A结果', serviceARes) console.log('服务B结果', serviceBRes) });
注意事项
- 原代码存在变量名笔误:第二个switchMap的形参写为
firstRep,但后续访问时用的是firstResp,请修正避免运行报错 - 该方案保留了原代码
switchMap的行为:如果上游触发新的请求,会自动取消未完成的B服务请求,符合原有逻辑
内容的提问来源于stack exchange,提问作者sumit sharma
相关产品推荐
相关产品推荐

