RxJS从mergeMap返回值数组

RxJS从mergeMap返回值数组,rxjs,rxjs6,Rxjs,Rxjs6,我有一条看得见的小溪。第一个操作符是一个mergeMap,它返回一个可观察的数组。然后,我必须有第二个mergeMap来从第一个mergeMap的返回中获取最终值。我觉得这第二张合并图应该是没有必要的,但找不到绕过它的方法 例如: source$.pipe( mergeMap(() => [of(1), of(2), of(3)]), mergeMap((val) => val) ) 这就是我最终拥有的。第二个mergeMap的存在只是为了订阅第一个mergeMap的输出。

我有一条看得见的小溪。第一个操作符是一个mergeMap,它返回一个可观察的数组。然后,我必须有第二个mergeMap来从第一个mergeMap的返回中获取最终值。我觉得这第二张合并图应该是没有必要的,但找不到绕过它的方法

例如:

source$.pipe(
  mergeMap(() => [of(1), of(2), of(3)]),
  mergeMap((val) => val)
)
这就是我最终拥有的。第二个mergeMap的存在只是为了订阅第一个mergeMap的输出。没有它,我的输出是可观察的,即1,而不是实际值1。有没有办法获得第二个合并映射?

您可以使用mergeMap操作符中的函数,将观察数组中的所有观察值合并为一个单独的观察值,该观察值将在任何基础观察值发出时发出

这方面的代码片段如下:

source$.pipe(
  mergeMap(() => merge(...[of(1), of(2), of(3)])),
)
您可以使用mergeMap操作符中的函数将观察数组中的所有观察值合并为一个观察值,当任何基础观察值发出时,该观察值将发出

这方面的代码片段如下:

source$.pipe(
  mergeMap(() => merge(...[of(1), of(2), of(3)])),
)

原因是第一个mergeMap应用于数组,不管是什么数组

换句话说

source$.pipe(
  mergeMap(() => ['a', 'b', 'c']),
)
首先发射a,然后发射b,然后发射c,然后发射完成

因此,在您的例子中,您需要第二个mergeMap来展平发射的可见光

作为一种替代方法,如果在您的案例中有意义的话,您可以使用forkJoin而不是mergeMap。像这样的

source$.pipe(
  forkJoin([of(1), of(2), of(3)]),
)
.subscribe(console.log) // '1' '2' '3'

原因是第一个mergeMap应用于数组,不管是什么数组

换句话说

source$.pipe(
  mergeMap(() => ['a', 'b', 'c']),
)
首先发射a,然后发射b,然后发射c,然后发射完成

因此,在您的例子中,您需要第二个mergeMap来展平发射的可见光

作为一种替代方法,如果在您的案例中有意义的话,您可以使用forkJoin而不是mergeMap。像这样的

source$.pipe(
  forkJoin([of(1), of(2), of(3)]),
)
.subscribe(console.log) // '1' '2' '3'

感谢您的响应,但是在本例中,我希望同时发出值,我不想等待所有值都完成。请参阅tomcek112的回答感谢您的响应,但是在本例中,我希望同时发出值,我不希望等待所有值完成。参见tomcek112的答案