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