这里仅供自己笔记,以便后续自己参考,新手学习请自行百度。
回调地狱:异步不断嵌套的现象。缺点代码可读性差,不利于维护。例如:
$.post(url1,function(d1){
$.post(url2,function(d2){
$.post(url3,function(d3){
do(d3);
})
}))
})
使用Promise优化后:
new Promise(function(resolved,rejected){
$.post(url,function(data){
if(成功){
resolved(d1)
}else{
rejected(e1)
}
})
}).then(function(d1){
return "aa"
}).then(function(d2){
//d2是上一个then返回的值“aa”,实际上不会这样用,
//通常上次返回的是Promise,则这里的d2 是上一个容器的promise的resolve
}).catch(function(){
//统一处理异常
})
使用async和await进行优化:
function asyncDo(data){
return new Promise(function(resolve,reject){
setTimeout(function(){
console.log(data);
if(data==3){
reject("ed")
}
resolve()
},1000)
});
}
//await必须用在async函数中,并且通过trycatch来捕获promise中的异常
async function testAsync(){
try{
let a = await asyncDo(1);
let b = await asyncDo(2);
let c = await asyncDo(3);
}catch(ee){
console.log(ee);
}
}
testAsync();