对于我的大多数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 => {
//...
}
});
答案 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
的参数。