在angualr组件中编写代码以在ngonit上每10秒从服务中获取数据,现在我想在特定时间(如5分钟或收集数据)后每10秒停止运行间隔。
组件代码。
Getrecords() {
Interval(10000).pipe(
startWith(0),
switchMap(() => this.getservice.getdata())
).subscribe(data => {
this.code = data
});
}
答案 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()