您好,登錄后才能下訂單哦!
這篇文章主要講解了“node.js中有沒有定時器”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“node.js中有沒有定時器”吧!
“node.js”中有定時器;“node.js”中的定時器模塊包含了一定時間執行一遍代碼的函數,定時器不必通過require()的方式引入,因為所有的方法都是模擬瀏覽器中JavaScript函數,是全局的;“node.js”中的定時器函數實現了與web瀏覽器提供的定時器API類似的API。
本文操作環境:Windows10系統、nodejs 12.19.0版、Dell G3電腦。
Node.js 中的定時器
Node.js 中的定時器模塊包含了隔一定時間執行一遍代碼的函數。定時器不必通過 require() 的方式引入,因為所有這些方法都是模擬瀏覽器中 JavaScript 函數,是全局的。為了更好的全面理解何時這些函數將執行,閱讀 Node.js 中事件輪詢是一個好主意。
用 Node.js 控制時間的連續
Node.js 中的 API 函數提供了幾種方式,允許代碼從現在時間之后的某個時刻開始執行。以下給出的函數看上去很相似,因為它們在大多數瀏覽器中都可用。但是 Node.js 實際上提供了它自己的實現。定時器與系統非常緊密地結合在一起,盡管這些 API 是瀏覽器中函數的翻版,但是仍然在實現上有所不同。
timer 用于安排函數在未來某個時間點被調用,Node.js 中的定時器函數實現了與 Web 瀏覽器提供的定時器 API 類似的 API,但是使用了事件循環實現,Node.js 中有四個相關的方法
setTimeout(callback, delay[, ...args]) setInterval(callback[, ...args]) setImmediate(callback[, ...args]) process.nextTick(callback[, ...args])
示例如下:
setTimeout() 可被用來在一段指定時間之后執行某個代碼任務。此函數與瀏覽器 JavaScript 函數 window.setTimeout() 很相似,但是你不能把一串字符串傳入執行。
setTimeout() 接受一個可執行的函數作為其第一個參數,然后有一個毫秒為單位的延時時間作為第二個參數。其余的參數也可納入其中,作為傳給此函數的參數使用。以下是一個例子:
function myFunc(arg) { console.log(`arg was => ${arg}`); } setTimeout(myFunc, 1500, 'funky');
因為使用了 setTimeout(),以上函數 myFunc() 將在 1500 毫秒(或者1.5秒)左右時執行。
設置的定時間隔不能保證每次都是以 精準 的毫秒間隔數執行代碼,這是因為其它阻塞或者正在事件輪詢上處理的代碼將推遲此定時的執行。唯一 保證的是定時器不會比聲明的時間間隔 提早 執行。
setTimeout() 返回一個 Timeout 對象,可通過該對象引用到設置的定時器。這個返回的對象可以被用來取消定時(見下面的 clearTimeout() 部分),同時還可以改變執行行為(見下面的 unref() 部分)。
"在此之后立即執行" setImmediate()
setImmediate() 將在當前事件輪詢的末尾處執行。 本代碼將在當前事件輪詢中的任何 I/O 操作 后,在任何下一輪定時器 前 執行。代碼執行可以被認為是“在此之后立即執行”,這意味著任何緊跟著 setImmediate() 函數調用將在 setImmediate() 函數參數前執行。
setImmediate() 的第一個參數是要執行的函數,當執行時,后面的參數將作為參數傳入這個函數中。這是一個例子:
console.log('before immediate'); setImmediate((arg) => { console.log(`executing immediate: ${arg}`); }, 'so immediate'); console.log('after immediate');
傳入 setImmediate() 的上述函數將在任何可執行的代碼執行完后執行,所以輸出結果是:
before immediate after immediate executing immediate: so immediate
setImmediate() 返回一個 Immediate 對象,它可以被用于取消安排的定時任務(見下面的 clearImmediate() )。
注意:不要把 setImmediate() 和 process.nextTick() 相混淆。它們有一些主要的差別:第一, process.nextTick() 將在任何設置好的 Immediate 以及任何安排好的 I/O 前 執行。第二, process.nextTick() 是不可擦除的,換句話說,一旦有代碼使用 process.nextTick() 執行,執行無法中斷,這就像一個普通函數一樣,具體可以參考此教程來更好地理解 process.nextTick() 的操作。
"永遠的輪詢" 執行 ~ setInterval()
如果存在一塊函數,它需要多次執行,setInterval() 可以派上用場。setInterval() 接受一個函數作為其參數,該函數將被運行無限次,第二個參數便是一個給定的延時毫秒數。就像 setTimeout(),其余參數可以在這之后添加,作為傳遞給函數調用的參數使用。另外一個和 setTimeout() 類似的地方是延時不保證精確,因為有些操作可能在事件輪詢上掛住,因此可以被認為是大致的延時。如以下例子:
function intervalFunc() { console.log('Cant stop me now!'); } setInterval(intervalFunc, 1500);
在上面的例子中,intervalFunc() 每 1500 毫秒執行一次(或每 1.5 秒執行一次),直到它被終止。
就像 setTimeout(),setInterval() 同樣返回一個 Timeout 對象,它可以被引用并且改變設定的定時器。
感謝各位的閱讀,以上就是“node.js中有沒有定時器”的內容了,經過本文的學習后,相信大家對node.js中有沒有定時器這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。