js 新语法 async await的使用
随着es6的更新与普及新的语法又在es7、es8中推广与更进一步;
es5的同步处理请求的方式:
server.getUser().then((res) => {
if (res.status == 'success') {
console.log('请求成功')
getAddress(res.model.id) //成功后再继续发下一个请求
} else {
console.log('请求失败')
}
})
function getAddress(userid){
server.getAddress({id:userid}).then((res) => {
if (res.status == 'success') {
console.log('请求成功')
//处理逻辑
} else {
console.log('请求失败')
}
})
}
点评:此处至少有两个问题
1.代码没有加异常处理,如果接口返回失败或代码质量报错,会造成代码阻塞卡死应用;
2.嵌套发请求太落后已不适应当前前端的发展,造成可读性差;
修改一下用es6 的async awiat
try{
let user =awiat getUser();
if(user){
let address = awiat getAddress(user.id)
//处理逻辑
}
}catch(e){
console.error(e)
}
//...省略代码 上面两个方法报错不会阻塞后面代码的执行
//封装两个请求方法
async function getUser(){
let data = '';
return new Promise(async (resolve, reject) => {
try{ //加异常处理
data =await server.getUser();
if(data.status=='success'){
return resolve(data)
}else{
return resolve('')
}
}catch(e){
reject(e)
}
})
}
async function getAddress(id){
let data = '';
return new Promise(async (resolve, reject) => {
try{ //加异常处理
data =await server.getAddress({id:id});
if(data.status=='success'){
return resolve(data)
}else{
return resolve('')
}
}catch(e){
reject(e)
}
})
}

浙公网安备 33010602011771号