长话短说,我有两个嵌套组件,内部组件应每1秒钟进行一次计数,为此创建了一个服务,该服务调用一个返回计数的URL。通过使用轮询间隔设置为1秒的IntervalObservable并订阅调用URL的服务方法subscriptionToScheduledUpdates,可以确保重现性。 我不明白为什么有时会尊重1秒,有时在两次计数之间会间隔3-4秒(当许多应用打开并占用大量处理器时,似乎会发生这种情况)。 有什么办法可以更好地重写此代码,以确保严格遵守重复间隔? 是/可能的原因是它不被尊重?
长话短说(带有代码示例)
我有一个名为Child的子组件,其中包含以下方法:
private subscribeToScheduledUpdates() {
this.mySubscription = this.myService.getScheduledUpdates().subscribe(data => {
if (data) {
this.onUpdate(data.count);
}
});
}
private onUpdate(vount: any) {
this.count.emit(count); //////// function should be called every 1 sec
console.log(new Date().toString()); /// logs the current time increases by 1 second each time
console.log(count); // logs the count
}
该组件具有一个选择器:
@Component({
selector: 'my-poll',
template: '',
})
此选择器集成在另一个组件上:
<my-poll (count)="onUpdate($event)"></my-poll>
public onUpdate(count: number) {
this.count = count;
}
在服务中,我有这样的内容:
getScheduledUpdates(): Observable<GrowlInformation> {
const pollInterval = 1000;
return IntervalObservable
.create(pollInterval)
.pipe(flatMap((res) => this.httpClient.get<GrowlInformation>(this.myUrl, {
headers: this.getInvalidateCacheHeaders(),
params: new HttpParams().set('timeStamp', encodeURIComponent(this.TimeStamp.toString()))
})),
tap(res => this.TimeStamp = res.timeStamp),
catchError(error => observableThrowError(this.handleError(error))));
}