async/await和Promise都是异步办法,async/await能更好的解决then链
async/await采纳同步的思维解决异步办法
栗子:我的项目中遇到的一个问题,mounted时须要获取到全副的报警类型后,再获取已抉择的报警类型,最后做的是先调用getAllAlarmTypeList(),而后50ms的延时再调用getAlarmCheckedList()就不会报错,后通过asynce/await能够优化,且更容易了解。
应用Promise办法
mounted() {this.getAllAlarmTypeList()setTimeout(this.handleAlarmTrendData, 50)
},
// 获取所有的报警类型
getAllAlarmTypeList() { let param = { subsystemType: 'XXXXX' } Api.getStatisticalAlarmTypes(param).then((res) => { if(res.value.length > 0) { // 代码 }) this.getAlarmCheckedList() } })},
// 获取已抉择的报警类型
getAlarmCheckedList() { let param = { subsystemType: 'XXXXX' } Api.getCheckedAlarmTypeList(param).then(res => { if(res.value.length > 0) { // 代码 } })},
应用async/await办法:
// 获取所有的报警类型
getAllAlarmTypeList() { return new Promise(async (resolve, reject) => { let param = { subsystemType: 'XXXX' } try { let res = await Api.getStatisticalAlarmTypes(param) if(res.value.length > 0) { res.value = res.value.map((item) => { // 代码 }) resolve(res.value) } else { resolve([]) } } catch (error) { console.error('获取报警类型失败' + error) } })},
// 获取已抉择的报警类型
getAlarmCheckedList() { return new Promise(async (resolve, reject) => { let param = { subsystemType: 'XXXX' } try { let res = await Api.getCheckedAlarmTypeList(param) if(res.value.length > 0) { resolve(res.value) } else { resolve([]) } } catch (error) { console.error('获取已选中报警类型失败' + error) } })},
// mounted()调用initData()
async initData() { let res = await this.getAllAlarmTypeList() this.allAlarmTypeList = res let res2 = await this.getAlarmCheckedList() this.allAlarmTypeList.forEach((item) => { // 代码代码 } })}
Api.js文件,申请后端接口,是async/await和Promise专用代码
// 统计报警类型配置查问
getStatisticalAlarmTypes (param) {return new Promise((resolve, reject) => { vue.resetAjax({ method: "get", url: `evo-gmcommon/VERSION/config/alarmTypes/${param.subsystemType}`, onSuccess(rel) { resolve(rel.data.data) }, onError(rel) { reject(rel) } })})
},
// 查问抉择的报警类型
getCheckedAlarmTypeList(param) {return new Promise((resolve, reject) => { vue.resetAjax({ method: "get", url: `evo-gmcommon/VERSION/alarm/statistical/getTrendAlarmTypes/${param.subsystemType}`, onSuccess(rel) { resolve(rel.data.data) }, onError(rel) { reject(rel) } })})
},