RxJS return 来自 mergeMap 的值数组

RxJS return array of values from mergeMap

我有一个可观察的流。第一个运算符是一个 mergeMap,它 return 是一个 observables 数组。然后我必须有第二个 mergeMap 来从第一个 mergeMap 的 return 中获取最终值。我觉得这第二个 mergeMap 应该是不必要的,但找不到解决方法。

示例:

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

这就是我最终拥有的。第二个 mergeMap 的存在只是为了订阅第一个的输出。没有它,我的输出是可观察的(即 of(1) 而不是实际值 1)。有没有办法绕过第二个 mergeMap?

您可以在 mergeMap 运算符中使用 merge 函数将您的 Observable 数组中的所有 observable 合并为一个单独的 observable,该 observable 将在任何底层 observable 发出时发出。

此代码段为:

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

原因是第一个mergeMap应用到数组,随便什么数组。

换句话说

source$.pipe(
  mergeMap(() => ['a', 'b', 'c']),
)

首先发出 a 然后 b 然后 c 然后完成。

因此,在您的情况下,您需要第二个 mergeMap 来展平发出的 Observables。

作为替代方法,如果对您的情况有意义,您可以使用 forkJoin 而不是 mergeMap。像这样

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