开篇吐槽
第一次遇到这个题,题目没强调日常红绿灯的场景,结果我还在想红黄绿到底要怎么闪烁,属于是题都看不懂
后面第二次遇到才明白场景是交通红绿灯,就是每个灯持续一段时间:
绿——绿(1s),黄——黄(2s),红——红(3s),绿......
通常要求使用promise和异步来实现这个效果,考察我们对异步函数和await的掌握(前提是理解题意)。
具体实现
function wait(time){
return new Promise(function (resolve){
setTimeout(resolve,time);
})
}
async function light(){
while(true){
console.log("Green");
await wait(1000);
console.log("Yellow");
await wait(2000);
console.log("Red");
await wait(3000);
}
}
light()
注解说明
// 写一个sleep函数(异步版),返回一个异步耗时的promise
function wait(time){
// 通过setTimeout和resolve的结合产生异步函数耗时控制效果
return new Promise(function (resolve){
setTimeout(resolve,time);
})
}
// 因为使用sleep函数,所以light函数是异步
async function light(){
// 循环红绿灯的执行
while(true){
// log “Green” 代表正在亮绿灯
console.log("Green");
// 通过await将异步函数同步执行,从而等待我们设置的时间,产生绿灯持续效果。
await wait(1000);
// 逻辑同上。
console.log("Yellow");
await wait(2000);
console.log("Red");
await wait(3000);
}
}
light()
本文章仅供参考,欢迎纠错和建议。