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