Arrays RX.JS相当于fromArray?

Arrays RX.JS相当于fromArray?,arrays,rxjs,operators,elements,Arrays,Rxjs,Operators,Elements,Rx.js似乎有一个操作员。什么东西从阵列中提取并发射阵列的元素?比如说,如果我这样做 ajax('localhost/foo') 返回{foo:[1,2,3]}。我如何将其映射到发出1、2和3的东西?我发现mergeMap()有效,但我不知道是否有更好的方法 ajax$.pipe( mergeMap( x => x.response.events ) ).subscribe( x => console.log("foo", x) ); 您正在从中查找,它将一个iterabl

Rx.js似乎有一个操作员。什么东西从阵列中提取并发射阵列的元素?比如说,如果我这样做

ajax('localhost/foo')

返回
{foo:[1,2,3]}
。我如何将其映射到发出
1
2
3
的东西?

我发现
mergeMap()
有效,但我不知道是否有更好的方法

ajax$.pipe(
  mergeMap( x => x.response.events )
).subscribe( x => console.log("foo", x) );

您正在从中查找
,它将一个iterable转换为一个observable

toArray
不是您要寻找的:它缓冲一个可观察对象的所有值,并在可观察对象完成后发出它们。 见:

在您的例子中,您已经有了一个可观察的ajax调用。它是一个可观察的itsel,即使它只返回一个值,然后立即完成

如果您使用
中的将您的可观测值(响应)映射到另一个可观测值,您将拥有一个可观测值的可观测值(称为高阶可观测值)。 见:

要获得简单的可观察数字,您还需要使用组合运算符(
merge
switch
concat
)。任何一个都可以

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

值得注意的是,对于发出单一结果(例如,常规HTTP请求)的observable,concatMap、flatMap、mergeMap、switchMap中的任何一个都将执行相同的操作。只有在处理发出多个项的源可观察时,它们之间的细微差异才会发挥作用。mergeMap函数的返回类型应该是可观察的,而不是原始值-我希望您在这里所做的操作会导致编译器错误,除非x.response.events是可观察的类型。Antoine的答案在我看来是正确的。@MarkHughes返回类型是
observativeInput
,定义为
SubscribableOrPromise | ArrayLike | Iterable
。RxJS允许您在许多地方使用这些类型,在这些地方您只希望接受可观测值。很好的一点@abetteroliver-我还没有意识到ArrayLike/Iterable也被接受-这就是为什么这个答案/does/work-从mergeMap函数返回ArrayLike/Iterable将导致每个元素的发射按顺序从iterable中选择值。