使用Rxjs时,在使用takeUntil
时,combineLatest
运算符与pipe
的行为有些混淆。
是否需要像这样通过管道takeUntil
向每个内部Observable添加takeUntil
:
import {combineLatest} from 'rxjs';
import {takeUntil} from 'rxjs/operators';
combineLatest(
this._store.pipe(select(stateOfLocation), takeUntil(this._destroy)),
this._store.pipe(select(stateOfPlacesSelected), takeUntil(this._destroy))
)
.pipe(takeUntil(this._destroy$))
.subscribe( ([location, places]) => {
/* Business Logic */
});
...或pipe(takeUntil(this._destroy$))
将处理combineLatest
中的内部Observable,如下所示:
combineLatest(
this._store.pipe(select(stateOfLocation)),
this._store.pipe(select(stateOfPlacesSelected))
)
.pipe(takeUntil(this._destroy$))
.subscribe( ([location, places]) => {
/* Business Logic */
});
我的猜测是稍后是正确的,但要仔细检查以确保我正确理解了这一点。
答案 0 :(得分:0)
根据经验:takeUntil
仅做一次。这就是模式的重点:将其放在一个位置。
一旦您在onNext(...)
上this._destroy$
,将保证takeUntil
报告完成,从而将触发拆解逻辑(其中包括正在取消订阅的逻辑)。