实现三个灯(红灯、黄灯、绿灯)按照指定时间间隔

实现三个灯(红灯、黄灯、绿灯)按照指定时间间隔(红灯3秒、黄灯2秒、绿灯1秒)不断交替重复亮灯,可以利用JavaScript的setInterval函数来创建一个定时器,该定时器会按照固定的时间间隔反复执行一个函数。

    let currentIndex = 0; // 当前亮的灯的索引  
    const intervals = [3000, 2000, 1000]; // 红灯、黄灯、绿灯的亮灯间隔(毫秒)  

    function turnOnLight(index) {
        console.log((index === 0 ? "红灯" : (index === 1 ? "黄灯" : "绿灯")) + "亮");
    }

    // 控制灯的函数,使用递归和setTimeout实现循环亮灯
    function controlLights() {
        function recursiveLight() {
            turnOnLight(currentIndex);  // 亮当前灯

            let nextInterval = intervals[currentIndex];  // 获取当前灯的亮灯间隔
            currentIndex = (currentIndex + 1) % 3;   // 更新索引到下一个灯

            // 使用setTimeout在下一个间隔后再次调用递归函数
            setTimeout(recursiveLight, nextInterval);
        }

        recursiveLight(); // 开始亮灯循环  
    }

    // 开始控制灯  
    controlLights();
function redLightOn() {
        return new Promise(resolve => {
            console.log("红灯亮");
            setTimeout(() => {
                console.log("红灯灭");
                resolve(); // 红灯亮3秒后解决Promise  
            }, 3000);
        });
    }

    function yellowLightOn() {
        return new Promise(resolve => {
            console.log("黄灯亮");
            setTimeout(() => {
                console.log("黄灯灭");
                resolve(); // 黄灯亮2秒后解决Promise  
            }, 2000);
        });
    }

    function greenLightOn() {
        return new Promise(resolve => {
            console.log("绿灯亮");
            setTimeout(() => {
                console.log("绿灯灭");
                resolve(); // 绿灯亮1秒后解决Promise  
            }, 1000);
        });
    }

    // 创建一个函数来启动灯光的交替亮灭  
    function startLights() {
        // 使用Promise.then()链来交替调用亮灯函数  
        redLightOn()
            .then(yellowLightOn)
            .then(greenLightOn)
            .then(() => {
                // 当绿灯亮完后,再次启动红灯,形成无限循环  
                return startLights();
            });
    }

    // 开始灯光循环  
    startLights();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值