ES7 async await 依次执行异步,全部执行完,再执行最后的代码
async function(){
await a();
await b();
console.log()//异步依次执行完毕后,执行此处最后的代码
}
写法
//模拟异步操作
function a(){//a异步
return new Promise(function(resolve){
console.log(`a起跑...`);
setTimeout(function(){//异步
console.log(`a到达终点!`);
//之后,主动调用resolve开门!
resolve();//自动执行.then()中串联的下一项任务
},6000)
})
}
function b(){//b异步
return new Promise(function(resolve){
console.log(`b起跑...`);
setTimeout(function(){//异步
console.log(`b到达终点!`);
//之后,主动调用resolve
resolve(); //通知.then中串联的下一项任务可以开始执行!
},4000)
})
}
function c(){//c异步
return new Promise(function(resolve){
console.log(`c起跑...`);
setTimeout(function(){//异步: 在主程序之外
console.log(`c到达终点!`);
resolve();
},2000)
})
}
//await等待前一个程序执行完,再执行当前程序
(async function (){
await a();
await b();
await c();
console.log('比赛结束!')
})()
//a起跑...
//a到达终点!
//b起跑...
//b到达终点!
//c起跑...
//c到达终点!
//比赛结束!
如何接返回值
function a(){//a异步
return new Promise(function(resolve){
var bang="接力棒";
console.log(`a起跑...`);
setTimeout(function(){//异步
console.log(`a到达终点!`);
//之后,主动调用resolve开门!
resolve(bang);//自动执行.then()中串联的下一项任务
},6000)
})
}
function b(bang){//b异步
return new Promise(function(resolve){
console.log(`b起跑...`);
setTimeout(function(){//异步
console.log(`b到达终点!`);
//之后,主动调用resolve
resolve(bang); //通知.then中串联的下一项任务可以开始执行!
},4000)
})
}
function c(bang){//c异步
return new Promise(function(resolve){
console.log(`c起跑...`);
setTimeout(function(){//异步: 在主程序之外
console.log(`c到达终点!`);
resolve(bang);
},2000)
})
}
//await等待前一个程序执行完,再执行当前程序
(async function (){
let bang = await a();
bang = await b(bang);
bang = await c(bang);
console.log(`${bang}比赛结束!`)
})()
//a起跑...
//a到达终点!
//b起跑...
//b到达终点!
//c起跑...
//c到达终点!
//接力棒比赛结束!
如何抛出程序错误try{}catch(e){}
function a(type){//a异步
return new Promise(function(resolve,reject){
if(type = 'makeMistake'){
reject('makeMistake');
}else{
console.log(`a起跑...`);
setTimeout(function(){//异步
console.log(`a到达终点!`);
//之后,主动调用resolve开门!
resolve();//自动执行.then()中串联的下一项任务
},6000)
}
})
}
function b(){//b异步
return new Promise(function(resolve){
console.log(`b起跑...`);
setTimeout(function(){//异步
console.log(`b到达终点!`);
//之后,主动调用resolve
resolve(); //通知.then中串联的下一项任务可以开始执行!
},4000)
})
}
function c(){//c异步
return new Promise(function(resolve){
console.log(`c起跑...`);
setTimeout(function(){//异步: 在主程序之外
console.log(`c到达终点!`);
resolve();
},2000)
})
}
//await等待前一个程序执行完,再执行当前程序
(async function (){
try{
let bang = await a('makeMistake');
await b();
await c();
console.log(`比赛结束!`)
}catch(error){
console.error(error);//'makeMistake'
}
})()
版权声明:本文为limuzhixing原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。