­

嘭,setTimeout炸了

~歡迎點擊上方藍字「歪碼行空」快速關注~


今天要說的很簡單,沒有setTimeout的基本用法,也沒有什麼特殊用法。

就是想記錄一下setTimeout的一個特殊情況,分享給可能也不知道的你們。

setTimeout的基本寫法大家都不陌生,如下:

setTimeout(() => {      // 說,你倒計時想幹什麼  }, millisecond)  

其中第二個參數是需要延時執行的毫秒數,大家應該都知道這個時間是不準確的,可以理解為最短延時。至於為什麼是不準確,事件循環了解一下。

但是這個最短延時也會騙人,因為它可能會爆炸 ?。

今天跟測一個項目,前端需要通過延時的方式去顯示某課程是否開始,未開始展示倒計時界面,倒計時至開始時去掉倒計時界面,拉取主體內容。

但是測試小姐姐反饋說她的課程沒有開始,沒有顯示倒計時,直接就顯示主內容。並且沒有復現步驟,只此一例。

我表示很詫異,但是也沒辦法。於是使出十八般武藝,開始在測試環境打斷點調試,分析代碼邏輯。好半天之後,納尼,邏輯肯定是對的,我相信我的判斷。

然後我突然開始懷疑setTimeout的倒計時時間問題。於是開始查,最後查到了原因,真的是這貨的鍋,它因為延時時間過長,炸了。

這就是今天的重點:setTimeout 的延時毫秒數是有限制的millisec 參數是 Int32 類型的,最大值為 2^32 – 1,即 2147483647。一旦超過這個限制,millisec 參數將被視為 0,代碼會被立馬執行

setInterval 也一樣,毫秒數過大會被當做 0,立即執行。

看完之後,以後如果你也遇到setTimeout失靈的情況,記得想起這茬。