Search code examples
javascripttypescriptnativescript

How to replace a push with a splice js


When entering a screen, 5 promises are loaded automatically, I use a promise.all, the problem is that they are executed randomly, within each function I use a push where I put the information.

The problem is that I have to change the push for a splice because the promise.all is loaded randomly and with the push I can't know which place to assign to each information of each "function". Here is my code:

At the beginning it loads the promises

ngOnInit(): void {
Promise.all([this.getData1(), this.getData2()]).then(values => {
            console.log(values)
            this.processing = true;
          }).catch(reason => {
            console.log('error get data',reason)
          });
}

I only put 2 as an example but in the other functions it is the same

 public getData1() {
        return new Promise((resolve, reject) => {
            this.createService.getServiceData1().subscribe(
                (response: any) => {
                    let customFieldOption: CustomFieldOption = new CustomFieldOption();
                    this.opcionServicio = response;
                    this.opcionesServicio.push(this.opcionServicio);
                    this.servicio.push(this.opcionesServicio[0].ticket_field.title)
                    customFieldOption.id = this.opcionServicio.ticket_field.id;
                    customFieldOption.name = this.opcionServicio.ticket_field.title;
                    this.customFieldOptions.push(customFieldOption);
                    resolve(true);
                },
                (error) => {
                    console.log(error);
                    reject(true);
                }
            );
        });
    }




 public getData2() {
            return new Promise((resolve, reject) => {
                this.createService.getServiceData2().subscribe(
                    (response: any) => {
                        let customFieldOption: CustomFieldOption = new CustomFieldOption();
                        this.opcionServicio = response;
                        this.opcionesServicio.push(this.opcionServicio);
                        this.servicio.push(this.opcionesServicio[0].ticket_field.title)
                        customFieldOption.id = this.opcionServicio.ticket_field.id;
                        customFieldOption.name = this.opcionServicio.ticket_field.title;
                        this.customFieldOptions.push(customFieldOption);
                        resolve(true);
                    },
                    (error) => {
                        console.log(error);
                        reject(true);
                    }
                );
            });
        }

Solution

  • You can use an array with indexes instead of push or an object with static keys.

    Example 1:

    You can put data1 to this.opcionesServicio[0] and data2 to this.opcionesServicio[1]. Then you know that they can be always accessed by the same index.

     opcionesServicio = [];
    
     public getData1(dataIndex = 0) {
       return new Promise((resolve, reject) => {
         this.createService.getServiceData1().subscribe((response: any) => {
            this.opcionesServicio[dataIndex] = respoosne;
         });
       });
     }
    
     public getData2(dataIndex = 1) {
       return new Promise((resolve, reject) => {
         this.createService.getServiceData2().subscribe((response: any) => {
            this.opcionesServicio[dataIndex] = respoosne;
         });
       });
     }
    
    // Access
    const data1 = this.opcionesServicio[0];
    const data2 = this.opcionesServicio[1];
    

    Example 2:

    You can store the data in an object instead. data1 goes to this.opcionesServicio['data1'] and data2 to this.opcionesServicio['data2']. Then you can access them by the data1, data2 keys.

     opcionesServicio = {};
    
     public getData1(dataName = 'data1') {
       return new Promise((resolve, reject) => {
         this.createService.getServiceData1().subscribe((response: any) => {
            this.opcionesServicio[dataName] = respoosne;
         });
       });
     }
    
     public getData2(dataName = 'data2') {
       return new Promise((resolve, reject) => {
         this.createService.getServiceData2().subscribe((response: any) => {
            this.opcionesServicio[dataName] = respoosne;
         });
       });
     }
    
    const data1 = this.opcionesServicio['data1'];
    const data2 = this.opcionesServicio['data2'];