实现三个灯(红灯、黄灯、绿灯)按照指定时间间隔(红灯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();