關於JavaScript/TypeScript中的setTimeout和setInterval


關於JavaScript/TypeScript中的setTimeout和setInterval

ypescript是強類型語言,定義setInterval()必須定義其返回值,但是你無論用百度或者谷歌搜中文也好英文也罷,都告訴你setInterval()的返回值類型是number,

如果你將setInterval()定義成number型,會告訴你不能將類型“Timeout”分配給類型“number”,但是如果定義成所謂的“Timeout”型,也就是“NodeJS.Timeout”型初期化又成了問題

那么要這么定義:

public timer: NodeJS.Timer | null = null;

但是不能完全照搬因為這么定義的話

clearInterval(timer)時參數類型會出問題,所以要將參數強制轉換成number型

也就是clearInterval(Number(timer))。

例:

數組只要含有 curTimes字段就創建一個定時器,多個定時器同時倒計時,若該時間大於當前時間則清楚該定時器

  this.list.map((itemSec, indexSec) => {
            let _this = this;
            if (itemSec.curTimes) {
              itemSec.timer = setInterval(() => {
                var my_time: any = new Date(Number(itemSec.curTimes)).getTime();
                var my_time2: any = new Date().getTime();
                var mss: any = Number(itemSec.curTimes) - Number(my_time2);
                if (Number(my_time) - Number(my_time2) <= 0) {
                  itemSec.timer && clearInterval(itemSec.timer);
                  itemSec.currentHours = 0;
                  itemSec.currentSecond = 0;
                  itemSec.currentMinutes = 0;
                  return;
                }
                var hours: any = Math.floor(
                  (mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
                );
                var minutes: any = Math.floor(
                  (mss % (1000 * 60 * 60)) / (1000 * 60)
                );
                var seconds: any = Math.floor((mss % (1000 * 60)) / 1000);
                if (minutes < 10) {
                  minutes = "0" + minutes;
                }
                if (seconds < 10) {
                  seconds = "0" + Number(seconds);
                } else {
                  seconds = Number(seconds);
                }
                itemSec.currentHours = hours;
                itemSec.currentSecond = seconds;
                itemSec.currentMinutes = minutes;
              
              }, 1000);
            }
          });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM