我有一个代码来处理来自可观察对象的某些数据,该可观察对象是通过@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;它实际上并没有传递对象,只是传递了引用,但仍然没有用。
我有一个代码来处理来自可观察对象的某些数据,该可观察对象是通过@Input批注获取的,我在NgOnInit()中订阅了可观察对象,一切都在工作...