Angular 4 轮询数据而不覆盖正在更新的项目

Sem*_*jić 5 polling angular

在传感器组件中,我有以下代码每 5 秒轮询一次数据:

  Observable
    .interval(this.sensorsRefreshRate * 1000)
    .startWith(0)
    .switchMap(() => Observable.fromPromise(this.getSensorsPromise(this.hubId)))
    .subscribe(res => {
      this.sensors = res.data;
    })
Run Code Online (Sandbox Code Playgroud)

在组件的模板中,我为传感器阵列中的每个项目生成一个子 Sensor 组件。

         <app-sensor
            [sensor]="sensor" 
            *ngFor="let sensor of sensors; trackBy: trackByFn">
          </app-sensor>
Run Code Online (Sandbox Code Playgroud)

子传感器组件负责更新传感器。

如果在 API 返回轮询数据之前进行更新,则会出现问题。在这种情况下,看起来更改的数据被旧的未更改数据覆盖。下次轮询数据时,将反映用户所做的更改。

简短说明:

  1. 将传感器状态标志更新为“真”
  2. 同时,API从更新那一刻开始返回数据,此时状态标志为“false”,看起来状态已被覆盖
  3. 再次轮询数据后,原始更改显示为应有的样子,因为 API 有新数据