最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nodejs中的計(jì)時(shí)器(setTimeout?setIntervals?etImmediate)使用案例解析

 更新時(shí)間:2023年06月13日 10:20:27   作者:狄仁杰666  
這篇文章主要介紹了Nodejs中的計(jì)時(shí)器(setTimeout?setIntervals?etImmediate)使用案例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

今天我們先來學(xué)習(xí)兩個(gè)小知識點(diǎn),他們就是:

  • 超時(shí)計(jì)時(shí)器:setTimeout
  • 間隔計(jì)時(shí)器:setInterval
  • 即時(shí)計(jì)時(shí)器:setImmediate
  • process.nextTick()

學(xué)習(xí)路徑

  • 超時(shí)計(jì)時(shí)器 setTimeout 的使用;
  • 取消超時(shí)計(jì)時(shí)器;
  • 間隔計(jì)時(shí)器 setInterval 的使用;
  • 取消間隔計(jì)時(shí)器;
  • 即時(shí)計(jì)時(shí)器:setImmediate
  • process.nextTick()
  • 計(jì)時(shí)器的一些特點(diǎn)(坑點(diǎn));

超時(shí)計(jì)時(shí)器 setTimeout 的使用;

超時(shí)計(jì)時(shí)器 setTimeout,作用是在延遲多久后執(zhí)行我們的代碼,是一次性的事件;

setTimeout 方法的接口規(guī)范;

setTimeout(callback,delayMillSeconds,[args])
// callback 為回調(diào)函數(shù)

setTimeout 方法的使用案例;

setTimeout(
  (text) => {
    console.log(text);
  },
  500,
  "超時(shí)計(jì)時(shí)器 2 觸發(fā)并停止"
);

或:

function timeoutExample(text: string) {
  console.log(text);
}
setTimeout(timeoutExample, 500, "超時(shí)計(jì)時(shí)器 1 觸發(fā)并停止");

超時(shí)計(jì)時(shí)器

取消超時(shí)計(jì)時(shí)器;

當(dāng)我們設(shè)置了一個(gè)時(shí)長比較長的超時(shí)計(jì)時(shí)器,如何中途取消呢?例子如下:

void (async () => {
  console.log(new Date());
  console.log("超時(shí)計(jì)時(shí)器 3 開始倒計(jì)時(shí)");
  const timer = setTimeout(
    (text) => {
      console.log(text);
    },
    30e3,
    "超時(shí)計(jì)時(shí)器 3 觸發(fā)"
  );
  await sleep(2e3);
  console.log(new Date());
  console.log("取消超時(shí)計(jì)時(shí)器 3");
  clearTimeout(timer);
  console.log("超時(shí)計(jì)時(shí)器 3 停止");
})();

取消超時(shí)計(jì)時(shí)器

我們會看到,按我們的設(shè)計(jì),2 秒鐘之后就將超時(shí)計(jì)時(shí)器停掉了,而不是等到 setTimeout 初始設(shè)置的 30 秒~

間隔計(jì)時(shí)器 setInterval 的使用;

間隔計(jì)時(shí)器 setInterval,作用是在每延遲多久后執(zhí)行我們的代碼,是重復(fù)性、循環(huán)性的事件;

setInterval 方法的接口規(guī)范;

setInterval(callback,delayMilliSecond,[args])
// callback 為回調(diào)函數(shù)

setTimeout 方法的使用案例;

(本例為:每隔 1 秒鐘執(zhí)行一次指令)

let count = 0;
function intervalExample() {
  console.log(count);
  count++;
}
setInterval(intervalExample, 1e3);

或:

let count = 0;
setInterval(function () {
  console.log(count);
  count++;
}, 1e3);

或傳參方式:

setInterval(
    function (text: string) {
      console.log(text);
    },
    1e3,
    "Hello~"
  );

取消間隔計(jì)時(shí)器;

const timer = setInterval(
  function (text: string) {
    console.log(text);
  },
  1e3,
  "Hello~"
);
// sleep 方法是我自己寫的
await sleep(3e3);
clearInterval(timer);

或在指定時(shí)間后取消間隔計(jì)時(shí)器:
(5 秒鐘后取消間隔計(jì)時(shí)器)

const timer = setInterval(
  function (text: string) {
    console.log(text);
  },
  1e3,
  "Hello~"
);
setTimeout(() => {
  clearInterval(timer);
}, 5e3);

即時(shí)計(jì)時(shí)器:setImmediate

摘抄自網(wǎng)絡(luò)文章~

當(dāng)你想在 Nodejs 中執(zhí)行異步代碼,并且想盡可能快的執(zhí)行,那么可以選擇 Nodejs 中的 setImmediate() 函數(shù)。

任何傳給setImmediate()的函數(shù)參數(shù),都是在事件循環(huán)(event loop)的下一個(gè)迭代被調(diào)用執(zhí)行。

setTimeout()以0ms的延時(shí)執(zhí)行函數(shù)參數(shù),和setImmediate()類似,但是這兩個(gè)誰先執(zhí)行,取決于多種因素,但是這兩個(gè)都是在事件循環(huán)的下一個(gè)迭代被調(diào)用執(zhí)行。

用法如:

setImmediate(function () {
  console.log("setImmediate...");
});

process.nextTick()

摘抄自網(wǎng)絡(luò)文章~

傳給process.nextTick()的函數(shù)參數(shù),是在事件循環(huán)的本次迭代最末尾執(zhí)行,當(dāng)前迭代的其他操作結(jié)束立刻執(zhí)行該函數(shù)參數(shù)。這意味著process.nextTick()執(zhí)行總是早于setImmediate()和setTimeout().

這幾個(gè)計(jì)時(shí)器的執(zhí)行順序我們親自實(shí)驗(yàn)一下:

console.log(111);
setTimeout(function () {
  console.log("setTimeout...");
}, 0);
process.nextTick(function () {
  console.log("nextTick...");
});
setImmediate(function () {
  console.log("setImmediate...");
});
console.log(222);
await sleep(1e3);
console.log(333);

幾個(gè)計(jì)時(shí)器的執(zhí)行順序

我們會看到其他非阻塞的命令會先執(zhí)行,然后是 process.nextTick(),接著是 setImmediate,然后是 setTimeout(此處演示延遲為 0 的時(shí)候),最后是其他阻塞的命令;

這樣就很清晰了吧~

計(jì)時(shí)器的一些特點(diǎn)(坑點(diǎn));

1. setInterval 是異步方法,當(dāng) callback 函數(shù)發(fā)生阻塞,間隔計(jì)時(shí)器并不會被阻塞;

2. 由于 setInterval 是異步方法,間隔計(jì)時(shí)器并不會被 callback 函數(shù)阻塞,因此當(dāng) callback 函數(shù)發(fā)生報(bào)錯(cuò),間隔計(jì)時(shí)器并不會拋錯(cuò)而停止,例如:

setInterval(
  async function (text: string) {
    console.log(text);
    await sleep(3e3);
    throw new Error("This is an error!");
  },
  1e3,
  "Hello~"
);

異步、不拋錯(cuò)

可以看到指令一直在執(zhí)行,并不會因拋錯(cuò)而停止~

這樣的異步和不拋錯(cuò),在某些場景下可能還是會詫異,記錄一下~

setTimeout 和 setInterval 執(zhí)行時(shí)間是不精確的。

function simpleTimeout(consoleTime) {
  console.timeEnd(consoleTime);
}
console.time("50MillSecond");
setTimeout(simpleTimeout, 50, "50MillSecond");
console.time("oneSecond");
setTimeout(simpleTimeout, 1000, "oneSecond");
console.time("twoSecond");
setTimeout(simpleTimeout, 2000, "twoSecond");
console.time("fiveSecond");
setTimeout(simpleTimeout, 5000, "fiveSecond");

執(zhí)行時(shí)間不精確

其他待后續(xù)記錄~

以上就是Nodejs中的計(jì)時(shí)器使用案例解析的詳細(xì)內(nèi)容,更多關(guān)于Nodejs計(jì)時(shí)器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • node.js調(diào)用腳本(python/shell)和系統(tǒng)命令

    node.js調(diào)用腳本(python/shell)和系統(tǒng)命令

    這篇文章介紹了node.js調(diào)用腳本(python/shell)和系統(tǒng)命令的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • 切換Node.js鏡像源的方法詳解

    切換Node.js鏡像源的方法詳解

    Node.js 是一個(gè)非常流行的 JavaScript 運(yùn)行環(huán)境,擁有許多強(qiáng)大的功能和庫,使得它在 Web 開發(fā)、服務(wù)器端編程等領(lǐng)域中廣泛使用,在本文中,我們將介紹如何切換 Node.js 的鏡像源,并提供一些思考和難點(diǎn),幫助讀者更好地理解這個(gè)問題,需要的朋友可以參考下
    2024-01-01
  • Node.js圖片處理庫sharp的使用

    Node.js圖片處理庫sharp的使用

    這篇文章主要介紹了Node.js圖片處理庫sharp的使用,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • nodejs中簡單實(shí)現(xiàn)Javascript Promise機(jī)制的實(shí)例

    nodejs中簡單實(shí)現(xiàn)Javascript Promise機(jī)制的實(shí)例

    這篇文章主要介紹了nodejs中簡單實(shí)現(xiàn)Javascript Promise機(jī)制的實(shí)例,本文在nodejs中簡單實(shí)現(xiàn)一個(gè)promise/A 規(guī)范,需要的朋友可以參考下
    2014-12-12
  • 吐槽一下我所了解的Node.js

    吐槽一下我所了解的Node.js

    用了一年多 Node.js, 現(xiàn)在已經(jīng)是 Node.js 的腦殘粉了,這篇日志比較雜,算是我對 Node.js 方方面面的一個(gè)集中吐槽。
    2014-10-10
  • Node.js插件安裝圖文教程

    Node.js插件安裝圖文教程

    Node.js是一個(gè)基于Chrome JavaScript運(yùn)行時(shí)建立的平臺, 用于方便地搭建響應(yīng)速度快、易于擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。本文給大家介紹Node.js插件安裝的教程,非常實(shí)用,特此分享給大家,需要的朋友一起學(xué)習(xí)吧
    2016-05-05
  • NodeJS遠(yuǎn)程代碼執(zhí)行

    NodeJS遠(yuǎn)程代碼執(zhí)行

    這篇文章主要介紹了NodeJS遠(yuǎn)程代碼執(zhí)行方法的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • node+experss實(shí)現(xiàn)爬取電影天堂爬蟲

    node+experss實(shí)現(xiàn)爬取電影天堂爬蟲

    本文給大家分享的是node+experss制作爬蟲的第二篇,我們來爬取電影天堂最新更新的電影迅雷下載鏈接,有需要的小伙伴可以參考下
    2016-11-11
  • Nodejs進(jìn)階:基于express+multer的文件上傳實(shí)例

    Nodejs進(jìn)階:基于express+multer的文件上傳實(shí)例

    本篇文章主要介紹了基于express+multer的文件上傳實(shí)例,現(xiàn)在分享給大家,也給大家做個(gè)參考,感興趣的小伙伴們可以參考一下。
    2016-11-11
  • 簡單聊一聊Node.js參數(shù)max-old-space-size

    簡單聊一聊Node.js參數(shù)max-old-space-size

    簡單的說Node.js就是運(yùn)行在服務(wù)端的JavaScript,下面這篇文章主要給大家介紹了關(guān)于Node.js參數(shù)max-old-space-size的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01

最新評論

高邮市| 永德县| 砚山县| 遂平县| 景谷| 南阳市| 扶余县| 贞丰县| 河间市| 兰溪市| 宁津县| 山阴县| 浮山县| 云霄县| 祁东县| 封开县| 娄底市| 灵武市| 邵阳市| 长兴县| 满洲里市| 揭西县| 临武县| 威海市| 霍邱县| 长春市| 洛川县| 鹤峰县| 奉化市| 邻水| 寿阳县| 廉江市| 宁化县| 桐梓县| 阳城县| 紫金县| 南江县| 伊宁市| 定远县| 长岛县| 盐津县|