如何阻止'observableTimer'

时间:2018-05-14 04:01:28

标签: angular rxjs observable

如何阻止observableTimer使用此代码:

observableTimer(0, 5000).pipe(
      tap(() => this.showLoader()),
      switchMap(() => this.store.dispatch(new Load()))
    )
    .subscribe((data: any) => {
      this.stopLoader();
    });

我需要运行计时器直到某些条件,比如我在代码中有一个变量或者是可观察的,所以当它是false时我想要停止计时器。

2 个答案:

答案 0 :(得分:2)

  

说我有一个变量

您可以使用takeWhile

  

说我有一个可观察的

您可以使用takeUntil

以下是一个例子:

data$.pipe(
  takeUntil(this.stopTimer$),
  //... 
)

stopTimer$发出时,对此observable的任何订阅都将被停止,因为observable已完成。

  

然后我无法取消订阅我的条件:

这里的问题是你试图取消订阅一个observable,这没有任何意义。您只能取消订阅订阅。所以你可以做到

this.sub = data$.pipe(...).subscribe(...);
this.sub unsubscribe();

但我个人更喜欢上面的takeUntil方法,因为取消订阅将通过完成它直接进入观察者本身。

答案 1 :(得分:0)

我只是用这段代码实现目标:

data: Subscription;

this.data = observableTimer(0, 5000).pipe(
      tap(() => this.showLoader()),
      switchMap(() => this.store.dispatch(new Load()))
    ).subscribe((data: any) => {
      this.stopLoader();
    });

然后我可以根据我的情况ubusbscribe

this.reconciliation.unsubscribe();

但不确定这是否是最佳方法。想法?