使用RXJS CombineLatest和管道takeUntil防止泄漏

时间:2019-03-03 00:13:53

标签: rxjs

使用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 */
      });

我的猜测是稍后是正确的,但要仔细检查以确保我正确理解了这一点。

1 个答案:

答案 0 :(得分:0)

根据经验:takeUntil仅做一次。这就是模式的重点:将其放在一个位置。

一旦您在onNext(...)this._destroy$,将保证takeUntil报告完成,从而将触发拆解逻辑(其中包括正在取消订阅的逻辑)。