RXJS中的条件连接?

时间:2018-10-03 08:05:24

标签: javascript rxjs

我有两个流:

const sourceOne = of(1, 2, 3);
const sourceTwo = of(4, 5, 6);
const example = sourceOne.pipe(concat(sourceTwo)); //123456

如您所见,我已将它们无条件级联。

但是事实证明,只有sourceOne中的第一项是“偶数”时,才需要连接它们。 (%2==0

问题:

如何通过添加有关第一个流的条件将sourceTwo连接到sourceOne

我知道我可以创建一个将通过管道传递的外部方法,但我认为这不是RXJS的实现方式。

1 个答案:

答案 0 :(得分:2)

如果sourceOne是冷酷的Observables(如您的示例所示),则可以按照以下方式尝试一些方法

const example = sourceOne.pipe(
  take(1),
  switchMap(d => d % 2 === 0 ? sourceOne.pipe(concat(sourceTwo)) : empty()),
)

如果相反sourceOne是热门观察站,则可以尝试类似的操作

const sourceOneHot = of(1, 2, 3).pipe(share());
const exampleHot = sourceOneHot.pipe(
  take(1),
  switchMap(d => d % 2 === 0 ? concat(of(d), sourceOneHot, sourceTwo) : empty()),
);

要创建可观察的热点,可以使用