实现一个红绿灯

本文介绍了在前端面试中遇到的红绿灯实现问题,通过Promise和async/await来创建交替效果。在晚上,交替时间会增加。文章详细阐述了实现步骤,包括使用changeColor改变样式,根据时间判断夜晚并调整间隔,以及通过异步操作确保灯光顺序交替。同时还提供了完整的代码和展示效果的截图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

昨天二面,面试官让写一个红绿灯,现场写了个简单的,今天整理了一下,把样式加了上去。

题目要求
实现一个交替的红绿灯,在晚上的时候交替时间增加;

核心思想
使用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,更好看一点


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值