JavaScript实现一个红绿灯程序


JavaScript实现一个红绿灯程序

这个题算是一个比较经典的面试题了,代码实现也很简单,下面我们就来看看是怎样实现的

setTimeout 版本

setTimeout 是 JavaScript 中的炸弹定时器,setTimeout 执行完就会立即被回收,那么我们就可以利用这个特点,在回收之前再去调用一个 setTimeout ,这样就能输出下一个灯的信息,当所有的灯都输出完毕后,我们就可以再递归调用一下程序,这样就会一直循环输出红绿灯了

function trafficLights() {
  console.log('绿灯')
  setTimeout(() => {
    console.log('黄灯')
    setTimeout(() => {
      console.log('红灯')
      setTimeout(() => {
        fn()
      }, 2000)
    }, 2000)
  }, 2000)
}
trafficLights()

Promise 版本

setTimeout 版本实现起来不是那么优雅,ES6的出现,可以让我们使用 async 和 Promise 去实现这个操作

function red() {
  console.log('红灯')
}

function green() {
  console.log('绿灯')
}

function yellow() {
  console.log('黄灯')
}

function wait(time, cb) {
  return new Promise((resolve) => {
    setTimeout(() => {
      cb()
      resolve()
    }, time)
  })
}

async function main() {
  while(true) {
    await wait(3000, red)
    await wait(2000, green)
    await wait(2000, yellow)
  }
}

main()

可以看到 Promise 实现起来代码逻辑比较清晰,而且我们可以使用 while 循环来代替递归


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM