如何展平rxjs from生成的嵌套Observable,订阅时得到扁平化数组
代码调整方案
原有代码存在3处错误:
- 元素判断逻辑错误:
item || from(item)逻辑不成立,非数组类型的原始值(如数字1、2)会直接被返回,不符合mergeMap要求返回Observable的规则 - 运算符位置错误:
toArray()是独立的管道操作符,不能作为mergeMap的参数传入 - 语法错误:pipe、subscribe的闭合括号缺失,代码无法正常运行
修改后的可运行代码如下:
import { from, of } from 'rxjs'; import { mergeMap, toArray } from 'rxjs/operators'; from([1, 2, 3, [4, 5], 6]).pipe( mergeMap(item => Array.isArray(item) ? from(item) : of(item)), toArray() ).subscribe(res => console.log("res", res))
代码逻辑说明:
- 用
Array.isArray判断当前流元素是否为数组,数组元素用from转为Observable逐个发射内部元素,非数组元素用of包装为Observable返回 - mergeMap会将所有内部Observable发射的值打平输出到主流程
- toArray会收集主流程发射的所有单个值,组合为数组后传递给订阅回调,最终输出期望的展平数组
[1,2,3,4,5,6]
内容的提问来源于stack exchange,提问作者Benjamin McFerren
相关产品推荐
相关产品推荐

