代码之家  ›  专栏  ›  技术社区  ›  Tobias Gassmann

RXJS:组合两个流,但在第二个流发送事件后取消第一个流

  •  2
  • Tobias Gassmann  · 技术社区  · 6 年前

    我确信我应该能够在RXJS文档中找到我的问题的答案,但是我什么也得不到…

    问题: 我有两条小溪,一条比另一条更重要。两者都提供相同的信息。但是如果流A第一次提供了一个值,我希望完全忽略流B,因为它现在已经过时了。

    它有点像缓存:从缓存中提供一个值,但是一旦有了一个活动值,就更新缓存,不再从中读取。

    我尝试了几种组合来处理这两个流,但是在a发布之后我不能取消b…

    哪个RX运营商可以提供我需要的功能?

    2 回复  |  直到 6 年前
        1
  •  3
  •   martin    6 年前

    看起来你可以用 merge takeUntil :

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

    什么时候? streamB$ 然后发射任何东西 streamA$ 将被忽略,因为 取到 将完成链。

        2
  •  1
  •   Yennefer    6 年前

    如果我理解正确,您可以合并这两个流,并取第一个答案:

    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));
    

    这将打印第一个答案,在本例中,这是第二个流的第一个元素。