rxjs:合并两个流,但是在第二个发送事件后取消第一个

时间:2019-01-15 11:35:22

标签: rxjs

我确信我应该能够在rxjs文档中找到解决问题的答案,但是我无处可寻...

问题: 我有两个流,一个比另一个重要。两者都提供相同的信息。但是如果流A首次提供了值,我想完全消除流B,因为它已经过时了。

这是一种缓存内容:从缓存中提供一个值,但是一旦有实时值,就更新缓存并不再读取它。

我已经尝试了将两个流传递到管道的几种组合,但是在A发布之后我无法取消B ...

哪个rx-operator可以提供我需要的功能?

2 个答案:

答案 0 :(得分:3)

您似乎只能使用mergetakeUntil

merge(
  streamA$.pipe(
    takeUntil(streamB$)
  ),
  streamB$
)

streamB$发出任何内容时,streamA$将被忽略,因为takeUntil将完成链。

答案 1 :(得分:1)

如果我理解正确,则可以合并两个流,并选择第一个回答:

const interval1$ = interval(1000);
const interval2$ = interval(800);

const source1 = interval1$.pipe(
  map(x => { return { id: 1, value: x } }),
  take(5)
);
const source2 = interval2$.pipe(
  map(x => { return { id: 2, value: x } }),
  take(5)
);

const s = merge(source1, source2);

const subscribe = s.pipe(take(1)).subscribe(x => console.log(x));

这将打印出第一个答案,在这种情况下,它是第二个流的第一个元素。