У меня есть код для обработки некоторых данных, которые поступают из наблюдаемой, эта наблюдаемая получается через аннотацию @Input, я подписываюсь на наблюдаемую внутри моего NgOnInit (), все работало нормально, но мне нужно было добавить код в сократить время обработки данных, представляющих собой массив массивов, мои данные выглядят так:
[['id1', объект, объект], ['id2', объект, объект]]
Таким образом, чтобы сократить время обработки, я создал переменную, которая будет содержать предыдущее значение Observable для последующей обработки, и я сравниваю предыдущие данные с новыми данными и обновляю только те данные, которые изменились, мой код выглядит следующим образом :
private dataSetHolder: Array<any> = [];
constructor() { }
ngOnInit() {
this.dataSet$.subscribe(data => { //line 43
console.log('inicio: ', this.dataSetHolder);
data.forEach(array => {
const dataNoId = Object.assign([], array);
const id = array[0];
dataNoId.shift();
let pacote: Package = { eixo_x: [], eixo_y: [] };
if (this.dataSetHolder.length === 0) {
pacote = this.separaDados(dataNoId, id, pacote);
this.loadData(pacote);
} else {
this.dataSetHolder.forEach(arrayHolder => {
if (id === arrayHolder[0]) {
if (array.length > arrayHolder.length) {
pacote = this.separaDados(dataNoId, id, pacote);
this.loadData(pacote);
}
}
});
}
});
this.dataSetHolder = data; //line 64
});
}
Когда строка 64 выполняется, текущее значение данных передается this.dataSetHolder, когда наблюдаемое получает новое значение, строка 43 выполняется снова, а когда строка 43 выполняется, значение this.dataSetHolder обновляется, это не должно происходить, оно должно обновляться только в строке 64.
Кто-нибудь понимает, что происходит там?
Обратите внимание, что от этого последнего изображения до следующего, которое я не нажал, продолжить отладку, я все еще на линии 44
Я также попытался изменить строку 64 на эту
this.dataSetHolder = Object.assign([], data);
Поскольку я думал, что это может быть вызвано javascript, потому что, когда я делаю это .dataSetHolder = data; фактически он не передает объект, только ссылку, но он все еще не работает.