昨天二面,面试官让写一个红绿灯,现场写了个简单的,今天整理了一下,把样式加了上去。
题目要求:
实现一个交替的红绿灯,在晚上的时候交替时间增加;
核心思想:
使用promise,在setTimeOut设定时间后换一个灯。用async await递归完成不停交替;
步骤1:
通过changeColor实现样式效果,然后获取当前时间,判断是否为晚上,再为其设置交替相隔时间;
使用setTimeOut设置在interval时间后,将promise的状态变为fulfilled。
function light(color, num) {
return new Promise((resolve, reject) => {
changeColor(color, num);
let hour = new Date().getHours(), interval;
if (hour < 18) {
interval = 2000;
} else {
interval = 5000;
}
setTimeout(resolve, interval);
})
}
步骤2:
用async/await异步操作,await接收一个promise对象,等上一个await完成后,async/await内置执行器指针自动下移,执行下一个语句,最后三个灯都显示过后,通过递归,实现不停交替的过程;
async function blink() {
await light('red', 0);
await light('orange', 1);
await light('green', 2);
await blink();
}
blink();
或者使用for循环也ok,更好看一点