JS是單線程運(yùn)行邏輯,所有的程序默認(rèn)在一個(gè)線程執(zhí)行,出現(xiàn)排隊(duì)執(zhí)行。所有的定時(shí)器中,回調(diào)函數(shù)會(huì)在主線程后事件隊(duì)列中執(zhí)行。
1、一次性定時(shí)器set/clearTimeout()
? ? ? ? ? ? ?一次性定時(shí)器的開(kāi)啟:當(dāng)間隔時(shí)間到了,會(huì)調(diào)用一次回調(diào)函數(shù),間隔時(shí)間的單位是毫秒。
? ? ? ? ? ? ? var timer=setTimeout(回調(diào)函數(shù),間隔時(shí)間)。
? ? ? ? ????????一次性定時(shí)器的清除 / 清除已經(jīng)開(kāi)啟的定時(shí)器:clearTimeout(timer)
? // 開(kāi)啟:3000毫秒以后,會(huì)調(diào)用函數(shù)
????????var timer = setTimeout(function(){
?????????? ?console.log('boom')
????????} ,3000)
????????console.log('結(jié)束')??// 清除
????????clearTimeout(timer)
2、周期性定時(shí)器
?????????周期性定時(shí)器的開(kāi)啟:每隔一段時(shí)間,就會(huì)調(diào)用一次回調(diào)函數(shù),間隔時(shí)間的單位也是毫秒。(循環(huán))
????????var timer = setInterval(回調(diào)函數(shù), 間隔時(shí)間)
????????清除開(kāi)啟的周期性定時(shí)器:clearInterval(timer);
var timer = setInterval(() => {
?? ?console.log('滴滴滴')
}, 3000)
console.log('結(jié)束')// 清除
clearInterval(timer)
3、立即執(zhí)行定時(shí)器
????????立即執(zhí)行定時(shí)器的開(kāi)啟:
????????var timer = setImmediate(回調(diào)函數(shù))
????????清除開(kāi)啟的立即執(zhí)行定時(shí)器:clearImmediate(timer)
? ? ? ?process.nextTick(回調(diào)函數(shù)): 開(kāi)啟后,沒(méi)有清除的方法。
console.log(2)
setImmediate(() => {
?? ?console.log(1)
})
process.nextTick(() => {
?? ?console.log(4)
})console.log(3)
//最后的結(jié)果是2 3? 4 1;文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-762487.html
//因?yàn)樗械亩〞r(shí)器中,回調(diào)函數(shù)會(huì)在主線程后事件隊(duì)列中執(zhí)行。而這兒打印2和3是主線程,就先打印2和3,文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-762487.html
到了這里,關(guān)于定時(shí)器的設(shè)置和清除setTimeout、setInterval、setImmediate-NodeJs的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!