Короче говоря, у меня есть два вложенных компонента, внутренний компонент, как ожидается, будет выполнять подсчет каждые 1 секунду, для этого создается служба, которая вызывает URL-адрес, который возвращает счет.Повторение обеспечивается за счет использования IntervalObservable с интервалом опроса, равным 1 секунде, и подпиской на метод службы subscribeToScheduledUpdates, который вызывает URL-адрес.Я не понимаю, почему иногда учитывается 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))));
}