RxJS Pipe技术问题:能否合并两个Observable结果并获取两者数据?
解决方案:保留上游Observable结果并顺序执行下游任务
针对你需要先完成第一个Observable,再用其结果执行第二个Observable,同时保留两者结果的场景,可以简化当前的实现方式:
优化后的代码
getUser() .pipe( concatMap(user => getSomethingWithUser(user).pipe( map(something => [user, something] as [User, SomethingWithUser]) ) ) ) .subscribe(([user, something]) => { // 直接使用user和返回的something数据 })
方案说明
concatMap严格保证上游的getUser()完成后,才会触发下游的getSomethingWithUser(user),完全符合你“第一个完成后再执行第二个”的要求。- 内部通过
map直接把原始的user和下游Observable的结果组合成数组,省去了用forkJoin包装of(user)的冗余代码,逻辑更清晰。
如果你不需要严格的顺序执行(比如允许并行发起请求),也可以把 concatMap 换成 mergeMap,但前者更贴合你的场景需求。
内容的提问来源于stack exchange,提问作者Ja Da
相关产品推荐
相关产品推荐

