RxJS学习疑问:如何用mergeMap拼接两个Observable的结果?
RxJS mergeMap 实现Observable值拼接的正确方式
你遇到的问题核心是:list2是Observable对象,不是它实际发出的值,直接用item + list2本质是把数字和对象做字符串拼接,自然会得到[object Object]这类错误结果。
正确的做法是在mergeMap的回调里,对list2的每个值做处理,和当前list1的item拼接:
import { of } from 'rxjs'; import { mergeMap, map } from 'rxjs/operators'; let list1 = of(1, 2); let list2 = of('A', 'B'); list1.pipe( mergeMap(item => // 遍历list2的每个值,和当前item拼接 list2.pipe(map(char => `${item}${char}`)) ) ).subscribe(res => console.log(res));
执行后会依次输出:1A、1B、2A、2B,完全符合你的需求。
原理说明:
mergeMap会订阅list1发出的每个item,然后返回一个新的Observable- 这个新Observable由
list2通过map转换而来,把每个字符和当前item拼接成目标字符串 mergeMap会自动合并所有这些子Observable的输出,最终按顺序发出拼接后的结果
内容的提问来源于stack exchange,提问作者Samit Sinha
相关产品推荐
相关产品推荐

