如何在rxjs中启动后停止间隔

时间:2019-06-24 00:19:44

标签: angular typescript

在angualr组件中编写代码以在ngonit上每10秒从服务中获取数据,现在我想在特定时间(如5分钟或收集数据)后每10秒停止运行间隔。

组件代码。

Getrecords() {
  Interval(10000).pipe(
    startWith(0),
    switchMap(() => this.getservice.getdata())
  ).subscribe(data => {
    this.code = data
  });
} 

3 个答案:

答案 0 :(得分:0)

我认为rxjs timer更适合这种情况,如下所示:

const source = timer(0,10000);
source
.pipe(take(6*5),//take till 5 mins i.e. 30 times
takeWhile(()=>a==b))//your condition
.subscribe()

答案 1 :(得分:0)

您需要取消订阅可观察的项目。

private intervalSub: Subscription;

Getrecords() {
  this.intervalSub = Interval(10000).pipe(
    startWith(0),
    switchMap(() => this.getservice.getdata())
  ).subscribe(data => { this.code = data });
}

cancelInterval() {
  if (this.intervalSub)
    this.intervalSub.unsubscribe();
}

您可以在某个点之后或在on destroy挂钩中手动调用此cancel函数(确保组件实现OnDestroy):

ngOnDestroy() {
  this.cancelInterval();
}

还有其他取消可观察对象的方法,例如添加一个将完成可观察对象的运算符,例如take(20)(如果您只想进行20次观察),或者可以使用异步管道让angular自动处理它,但这是一种surefire方法。

答案 2 :(得分:0)

使用switchMap扩展User3250答案

const source = timer(0,10000);
    source
    .pipe(take(6*5),//take till 5 mins i.e. 30 times
    switchMap(()=>this.service))
    .subscribe()