我确信我应该能够在rxjs文档中找到解决问题的答案,但是我无处可寻...
问题: 我有两个流,一个比另一个重要。两者都提供相同的信息。但是如果流A首次提供了值,我想完全消除流B,因为它已经过时了。
这是一种缓存内容:从缓存中提供一个值,但是一旦有实时值,就更新缓存并不再读取它。
我已经尝试了将两个流传递到管道的几种组合,但是在A发布之后我无法取消B ...
哪个rx-operator可以提供我需要的功能?
答案 0 :(得分:3)
您似乎只能使用merge
和takeUntil
:
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));
这将打印出第一个答案,在这种情况下,它是第二个流的第一个元素。