相当于fromArray的RX.JS?

时间:2018-07-31 21:52:13

标签: arrays rxjs operators elements

Rx.js似乎有一个运算符toArray。是什么从数组中取出东西并发出数组的元素?例如,如果我这样做,

ajax('localhost/foo')

,返回{foo: [1,2,3]}。如何将其映射到发出123的对象上?

2 个答案:

答案 0 :(得分:2)

您正在寻找from,它将可迭代对象转换为可观测对象。

toArray不是您要查找的内容:它缓冲可观察对象的所有值,并在可观察对象完成后发出它们。 参见:http://reactivex.io/documentation/operators/to.html

在您的情况下,您已经有一个可观察的对象,即您的ajax调用。即使它只返回一个值然后立即完成,这也是一个可观察的结果。

如果将您的可观察值(响应)产生的值映射到使用from的另一个可观察值,则您将获得一个可观察值的可观察值(称为高阶可观察值)。 参见:https://netbasal.com/understanding-mergemap-and-switchmap-in-rxjs-13cf9c57c885

要简单地观察数字,您还需要使用组合运算符(mergeswitchconcat)。任何一个都可以做。

ajax$.pipe(
  concatMap(x => from(x.response.events)),
).subscribe(x => console.log("foo", x)) // 1, then 2, then 3

答案 1 :(得分:1)

我发现发现ajax$.pipe( mergeMap( x => x.response.events ) ).subscribe( x => console.log("foo", x) ); 可行,但是我不知道是否有更好的方法,

{{1}}