Почему интервал повторения задерживается на IntervalObservable? - PullRequest
0 голосов
/ 10 октября 2018

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