天天看點

記一次位元組跳動面試的程式設計題

題目描述

要求實作一個Quene類,包括
  • task

    方法
    • 傳入兩個參數
      1. 延遲執行時間(機關:ms)
      2. 執行的函數
    • 要求實作鍊式調用
  • start

    方法
    • 執行

      start

      方法後依次執行(執行完上一個task方法中的函數後才能執行下一個)

示例

執行結果:一秒後輸出a,十秒後輸出b ,再過兩秒輸出c

codepen示範

new Quene()
.task(1000, () => {
 console.log('a')
})
.task(10000, () => {
 console.log('b')
})
.task(2000, () => {
 console.log('c')
}).start()
           

思路

執行task函數的時候,用一個數組去存儲之後要執行的函數,在start方法被調用的時候,周遊數組,調用方法

代碼實作

function Quene(){
  	this.quene = [] // 用于存儲需要執行的方法 
}

Quene.prototype.task = function(interval, fn) {
  this.quene.push(
    // 傳入delay函數的作用是為了等上一個函數執行完再執行下一個
    function(delay) { 
      setTimeout(fn, interval+delay)
      return interval+delay //傳回前面函數執行一共需要延遲的時間
    }
  )
  return this// 實作鍊式調用
}

Quene.prototype.start = function() {
  let delay = 0
  for(let i=0;i<this.quene.length;i++){
    delay = this.quene[i](delay)
  }
}
           

如果有更好的方法 歡迎評論區交流!!

繼續閱讀