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)    }  })})

},

能够这样了解,Promise先调用全副类型getAllAlarmTypeList(),.then()后在调用getAlarmCheckedList();用async/await, await要等前面的办法执行完后再执行下一句代码