来自可观察订阅的角度7奇怪的行为

问题描述 投票:0回答:1

我有一个代码来处理来自可观察对象的某些数据,该可观察对象是通过@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行进行更新。

有人知道那里发生了什么吗?

inserir a descrição da imagem aqui

inserir a descrição da imagem aqui

inserir a descrição da imagem aqui

请注意,从最后一张图像到下一个我未点击的图像,继续进行调试,我仍然在第44行上

inserir a descrição da imagem aqui

我也尝试将第64行更改为此

            this.dataSetHolder = Object.assign([], data);

因为我认为可能是JavaScript引起的,因为当我执行此操作时。dataSetHolder= data;它实际上并没有传递对象,只是传递了引用,但仍然没有用。

我有一个代码来处理来自可观察对象的某些数据,该可观察对象是通过@Input批注获取的,我在NgOnInit()中订阅了可观察对象,一切都在工作...

angular rxjs observable subscribe angular-observable
1个回答
0
投票
我的最终代码如下:
© www.soinside.com 2019 - 2024. All rights reserved.