如何阻止observableTimer
使用此代码:
observableTimer(0, 5000).pipe(
tap(() => this.showLoader()),
switchMap(() => this.store.dispatch(new Load()))
)
.subscribe((data: any) => {
this.stopLoader();
});
我需要运行计时器直到某些条件,比如我在代码中有一个变量或者是可观察的,所以当它是false
时我想要停止计时器。
答案 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();
但不确定这是否是最佳方法。想法?