为什么间隔间隔在IntervalObservable上被延迟?

时间:2018-10-10 05:50:56

标签: javascript angular observable angular6 recurrence

长话短说,我有两个嵌套组件,内部组件应每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))));
    }

0 个答案:

没有答案