代码之家  ›  专栏  ›  技术社区  ›  mtnp

使用takeWhile运算符和不同的可观测源作为标志

  •  1
  • mtnp  · 技术社区  · 4 年前

    我想通过使用另一个可观察来源取消订阅一个可观察来源。

    stop$: Subject<boolean> = new Subject<boolean>();
    source: Subject<string> = new Subject<string>();
    this.source.pipe(takeWhile(this.stop$ === false)).subscribe()
    

    我能和takeWhile接线员一起做吗?

    0 回复  |  直到 4 年前
        1
  •  1
  •   munleashed    4 年前

    takeWhile运算符将发出值,直到提供的表达式为false。谓词函数应该返回 true 或者 false 值,因此您不能在此处使用主题(尽管您可以进行一些修改,并使用Behavior subject和类似功能,但不推荐使用)

    编辑:

    更好的解决方案是以如下方式使用takeUntil运算符:

    this.source
      .pipe(
        takeUntil(
          this.stop$.pipe(filter(val => !val))
        )
      )
      .subscribe()
    

    或者你可以提取一个可观察的:

    unsubscribe$: Observable<boolean> = this.stop$.pipe(filter(val => !val));
    
    this.source
      .pipe(takeUntil(this.unsubscribe$))
      .subscribe()