首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Observable<T[]>转换为Observable<T>

如何将Observable<T[]>转换为Observable<T>
EN

Stack Overflow用户
提问于 2016-03-15 18:17:02
回答 2查看 2.5K关注 0票数 5

我想取一个Observable,并将其转换为一个可观测的数组,以便将来自Observable的每个数组分解,然后通过可观测值分别发出数组的各个元素。

这样做有标准的操作员吗?我到处找过,但什么也没找到。谢谢。

在被指向串联地图/平台地图的方向后,我提出了以下通用解决方案:

代码语言:javascript
运行
复制
var source: Observable<T[]>;
...
var splitSource = source.flatMap<T>((x:T[]) => { return Rx.Observable.fromArray(x); });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-15 18:35:49

您可以像这样使用concatMap

代码语言:javascript
运行
复制
function identity (x) {return x}

var obs_of_array$ = Rx.Observable.return(['1','2','you got it'])
    .concatMap(identity)

这是因为concatMap还接受数组(以及可观察的和承诺的)作为作为参数传递的函数选择器的返回值。Jsbin 这里,documentation 这里

因此,作为参数传递的数组成为从选择器函数返回的值,然后由concatMap操作符在尊重数组的顺序的同时将其扁平化。

票数 6
EN

Stack Overflow用户

发布于 2017-02-28 22:48:42

我还一直在尝试将Observable<T[]>转换为Observable<T>

我发现flatMap()是靠自己来完成这项工作的,我猜想11个月前当这个问题被问到的时候,情况并非如此。

为了说明,在@ answer 3743222的答案中,您可以做此更改并获得相同的输出:

代码语言:javascript
运行
复制
//.concatMap(identity)
.flatMap(theArray=>theArray)

我使用这个和toArray()操作符在管道中执行set操作,例如对可观察的排序。

代码语言:javascript
运行
复制
    let sorted$ = source$.toArray().flatMap(theList=> theList.sort(this.myComparer) )

输出为Observable<T>。(N.B在固定数组的上下文中工作,不确定连续生成源会发生什么情况)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36019085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档