溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

node.js中有沒(méi)有定時(shí)器

發(fā)布時(shí)間:2022-07-05 09:20:59 來(lái)源:億速云 閱讀:152 作者:iii 欄目:web開(kāi)發(fā)

這篇文章主要講解了“node.js中有沒(méi)有定時(shí)器”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“node.js中有沒(méi)有定時(shí)器”吧!

“node.js”中有定時(shí)器;“node.js”中的定時(shí)器模塊包含了一定時(shí)間執(zhí)行一遍代碼的函數(shù),定時(shí)器不必通過(guò)require()的方式引入,因?yàn)樗械姆椒ǘ际悄M瀏覽器中JavaScript函數(shù),是全局的;“node.js”中的定時(shí)器函數(shù)實(shí)現(xiàn)了與web瀏覽器提供的定時(shí)器API類(lèi)似的API。

本文操作環(huán)境:Windows10系統(tǒng)、nodejs 12.19.0版、Dell G3電腦。

node.js中有定時(shí)器

Node.js 中的定時(shí)器

Node.js 中的定時(shí)器模塊包含了隔一定時(shí)間執(zhí)行一遍代碼的函數(shù)。定時(shí)器不必通過(guò) require() 的方式引入,因?yàn)樗羞@些方法都是模擬瀏覽器中 JavaScript 函數(shù),是全局的。為了更好的全面理解何時(shí)這些函數(shù)將執(zhí)行,閱讀 Node.js 中事件輪詢是一個(gè)好主意。

用 Node.js 控制時(shí)間的連續(xù)

Node.js 中的 API 函數(shù)提供了幾種方式,允許代碼從現(xiàn)在時(shí)間之后的某個(gè)時(shí)刻開(kāi)始執(zhí)行。以下給出的函數(shù)看上去很相似,因?yàn)樗鼈冊(cè)诖蠖鄶?shù)瀏覽器中都可用。但是 Node.js 實(shí)際上提供了它自己的實(shí)現(xiàn)。定時(shí)器與系統(tǒng)非常緊密地結(jié)合在一起,盡管這些 API 是瀏覽器中函數(shù)的翻版,但是仍然在實(shí)現(xiàn)上有所不同。

timer 用于安排函數(shù)在未來(lái)某個(gè)時(shí)間點(diǎn)被調(diào)用,Node.js 中的定時(shí)器函數(shù)實(shí)現(xiàn)了與 Web 瀏覽器提供的定時(shí)器 API 類(lèi)似的 API,但是使用了事件循環(huán)實(shí)現(xiàn),Node.js 中有四個(gè)相關(guān)的方法

setTimeout(callback, delay[, ...args])
setInterval(callback[, ...args])
setImmediate(callback[, ...args])
process.nextTick(callback[, ...args])

示例如下:

setTimeout() 可被用來(lái)在一段指定時(shí)間之后執(zhí)行某個(gè)代碼任務(wù)。此函數(shù)與瀏覽器 JavaScript 函數(shù) window.setTimeout() 很相似,但是你不能把一串字符串傳入執(zhí)行。

setTimeout() 接受一個(gè)可執(zhí)行的函數(shù)作為其第一個(gè)參數(shù),然后有一個(gè)毫秒為單位的延時(shí)時(shí)間作為第二個(gè)參數(shù)。其余的參數(shù)也可納入其中,作為傳給此函數(shù)的參數(shù)使用。以下是一個(gè)例子:

function myFunc(arg) {
  console.log(`arg was => ${arg}`);
}
setTimeout(myFunc, 1500, 'funky');

因?yàn)槭褂昧?setTimeout(),以上函數(shù) myFunc() 將在 1500 毫秒(或者1.5秒)左右時(shí)執(zhí)行。

設(shè)置的定時(shí)間隔不能保證每次都是以 精準(zhǔn) 的毫秒間隔數(shù)執(zhí)行代碼,這是因?yàn)槠渌枞蛘哒谑录喸兩咸幚淼拇a將推遲此定時(shí)的執(zhí)行。唯一 保證的是定時(shí)器不會(huì)比聲明的時(shí)間間隔 提早 執(zhí)行。

setTimeout() 返回一個(gè) Timeout 對(duì)象,可通過(guò)該對(duì)象引用到設(shè)置的定時(shí)器。這個(gè)返回的對(duì)象可以被用來(lái)取消定時(shí)(見(jiàn)下面的 clearTimeout() 部分),同時(shí)還可以改變執(zhí)行行為(見(jiàn)下面的 unref() 部分)。

"在此之后立即執(zhí)行" setImmediate()

setImmediate() 將在當(dāng)前事件輪詢的末尾處執(zhí)行。 本代碼將在當(dāng)前事件輪詢中的任何 I/O 操作 后,在任何下一輪定時(shí)器 前 執(zhí)行。代碼執(zhí)行可以被認(rèn)為是“在此之后立即執(zhí)行”,這意味著任何緊跟著 setImmediate() 函數(shù)調(diào)用將在 setImmediate() 函數(shù)參數(shù)前執(zhí)行。

setImmediate() 的第一個(gè)參數(shù)是要執(zhí)行的函數(shù),當(dāng)執(zhí)行時(shí),后面的參數(shù)將作為參數(shù)傳入這個(gè)函數(shù)中。這是一個(gè)例子:

console.log('before immediate');
setImmediate((arg) => {
  console.log(`executing immediate: ${arg}`);
}, 'so immediate');
console.log('after immediate');

傳入 setImmediate() 的上述函數(shù)將在任何可執(zhí)行的代碼執(zhí)行完后執(zhí)行,所以輸出結(jié)果是:

before immediate
after immediate
executing immediate: so immediate

setImmediate() 返回一個(gè) Immediate 對(duì)象,它可以被用于取消安排的定時(shí)任務(wù)(見(jiàn)下面的 clearImmediate() )。

注意:不要把 setImmediate() 和 process.nextTick() 相混淆。它們有一些主要的差別:第一, process.nextTick() 將在任何設(shè)置好的 Immediate 以及任何安排好的 I/O 前 執(zhí)行。第二, process.nextTick() 是不可擦除的,換句話說(shuō),一旦有代碼使用 process.nextTick() 執(zhí)行,執(zhí)行無(wú)法中斷,這就像一個(gè)普通函數(shù)一樣,具體可以參考此教程來(lái)更好地理解 process.nextTick() 的操作。

"永遠(yuǎn)的輪詢" 執(zhí)行 ~ setInterval()

如果存在一塊函數(shù),它需要多次執(zhí)行,setInterval() 可以派上用場(chǎng)。setInterval() 接受一個(gè)函數(shù)作為其參數(shù),該函數(shù)將被運(yùn)行無(wú)限次,第二個(gè)參數(shù)便是一個(gè)給定的延時(shí)毫秒數(shù)。就像 setTimeout(),其余參數(shù)可以在這之后添加,作為傳遞給函數(shù)調(diào)用的參數(shù)使用。另外一個(gè)和 setTimeout() 類(lèi)似的地方是延時(shí)不保證精確,因?yàn)橛行┎僮骺赡茉谑录喸兩蠏熳。虼丝梢员徽J(rèn)為是大致的延時(shí)。如以下例子:

function intervalFunc() {
  console.log('Cant stop me now!');
}
setInterval(intervalFunc, 1500);

在上面的例子中,intervalFunc() 每 1500 毫秒執(zhí)行一次(或每 1.5 秒執(zhí)行一次),直到它被終止。

就像 setTimeout(),setInterval() 同樣返回一個(gè) Timeout 對(duì)象,它可以被引用并且改變?cè)O(shè)定的定時(shí)器。

感謝各位的閱讀,以上就是“node.js中有沒(méi)有定時(shí)器”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)node.js中有沒(méi)有定時(shí)器這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI