Вы можете попробовать использовать rxjs Subject
с bufferTime()
.Это будет поддерживать обновления DOM с постоянной частотой.
Для запроса OP, вот рабочий пример.Я использовал bufferTime()
вместо ранее предложенного debounce
Вот рабочий пример в slackbitz .И фрагмент фактического кода:
import { Subject } from 'rxjs';
import { scan, bufferTime } from 'rxjs/operators';
import { interval, Observable } from 'rxjs';
@Component({
...
})
export class AppComponent {
logs$ = new Subject();
delayed$: Observable<string[]>;
constructor () {}
ngOnInit() {
this.delayed$ = this.logs$
.pipe(
bufferTime(5000),
scan((acc: string[], curr: string[]) => [...acc, ...curr], []),
);
// stand in code to replace OP's .socket() event listener
const source = interval(100);
source.subscribe(num => this.logs$.next(`<p>Log Item ${num}</p>`))
}
}
Тогда в вашем HTML, вам просто нужно подписаться.например,
<li *ngFor="let log of (delayed$ | async)" [innerHTML]="log"></li>