如何用JS的splice替换push解决Promise.all异步顺序问题
问题说明
页面初始化时会自动加载5个Promise,通过Promise.all执行,但Promise的执行顺序是随机的。目前每个数据获取函数都用push方法向数组中添加数据,导致无法确定各函数对应的数据在数组中的位置,需要将push替换为splice来指定数据的插入位置。
初始化加载Promise的代码
ngOnInit(): void { Promise.all([this.getData1(), this.getData2()]).then(values => { console.log(values) this.processing = true; }).catch(reason => { console.log('error get data', reason) }); }
数据获取函数示例(其余函数逻辑一致)
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); } ); }); }
内容的提问来源于stack exchange,提问作者ALAIN TORRES
相关产品推荐
相关产品推荐

