「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 對象,它可以被引用並且改變設定的計時器。
推薦學習:《nodejs影片教學》
以上是node.js中有定時器嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!