// 实现一个红绿灯
async function printColor(color,time){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log(color);
resolve()
},time)
})
}
async function test(){
await printColor('red',3000);
await printColor('green',2000);
await printColor('yellow',1000);
}
test()
一个注意点:async自己会自动封装一个promise,所以为什么要返回一个promise?不能像下面这样写吗?
async function printColor(color,time){
setTimeout(()=>{
console.log(color);
resolve()
},time)
return 'ok';
}
答案是不能的,为了满足我们的需求,我们需要在上一个定时器任务结束后才开启下一个定时器,所以要在定时器内部resolve,而如果直接return ‘ok'的话,会导致Promise几乎同时完成,也就几乎同时开启了三个定时器。