取消RXJS FlatMap链上的订阅

时间:2018-05-16 06:20:46

标签: angular rxjs observable

对于我的大多数RxJ订阅,我按照takeWhile方法取消订阅,如this article by Brian Love

中所述

如果我使用flatMap'链接'多个Observable,我应该有多个takeWhile s(链中的每个'hop'一次吗?或者一个takeWhile是否足够?例如:

  this.dataService.awaitSomeObservable()
      .takeWhile(() => this.alive) /// <= No 1
      .flatMap(result1 => {

        //...

        return this.dataService.awaitAnotherObservable();
      })
      .takeWhile(() => this.alive) /// <= No 2 - is this necessary ????
      .subscribe(result2 => {

          //...

        }
      });

1 个答案:

答案 0 :(得分:1)

如果您使用RxJS的最新版本(v5.5及更高版本),那么takeWhile就足够了,但您可以pipe(如下所示)。

this.dataService.awaitSomeObservable().pipe(
      takeWhile(() => this.alive), 
      flatMap(result1 => {
        //...
        return this.dataService.awaitAnotherObservable();
      })
).subscribe(x=>{})

您实际上可以在takeWhile之前或之后放置flatMap,但根据您的实际用例提供适当的函数作为takeWhile的参数。