回调函数管理异步任务,会造成难以看懂和维护的回调地狱。使用promise可以解决回调地狱问题,但是还是不过简洁和优雅。所以出现了async,await结合的方案,使异步编程看起来几乎跟同步编程一样,更利于代码的维护。废话少说,直接上代码。
function s1(){
return new Promise((resolve,reject) => {
setTimeout(() => {
var a = 1;
console.log(a);
resolve(a);
},500);
});
}
function s2(a){
return new Promise((resolve,reject) => {
setTimeout(() => {
var b =a + 1;
console.log(b);
resolve(b);
},500);
});
}
function s3(b){
return new Promise((resolve,reject) => {
setTimeout(() => {
var c =b + 1;
console.log(c);
reject("err");
},500);
});
}
async function main(){
try{
var a = await s1();
var b = await s2(a);
var c = await s3(b);
}catch(err){
console.log(err);
}
}
main();
输出:1 2 3 err