欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

今天我們先來學習兩個小知識點,他們就是:

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

學習路徑

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

超時計時器 setTimeout 的使用;

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

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

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

setTimeout 方法的使用案例;

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

或:

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

超時計時器

取消超時計時器;

當我們設置了一個時長比較長的超時計時器,如何中途取消呢?例子如下:

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

取消超時計時器

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

間隔計時器 setInterval 的使用;

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

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

setInterval(callback,delayMilliSecond,[args])
// callback 為回調函數(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~"
  );

取消間隔計時器;

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

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

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

即時計時器:setImmediate

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

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

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

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

用法如:

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

process.nextTick()

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

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

這幾個計時器的執(zhí)行順序我們親自實驗一下:

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);

幾個計時器的執(zhí)行順序

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

這樣就很清晰了吧~

計時器的一些特點(坑點);

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

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

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

異步、不拋錯

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

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

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

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í)行時間不精確

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

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

相關文章

  • express框架中使用jwt實現(xiàn)驗證的方法

    express框架中使用jwt實現(xiàn)驗證的方法

    這篇文章主要給大家介紹了關于express框架中使用jwt實現(xiàn)驗證的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用express具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • Node.js實現(xiàn)用戶身份驗證和授權的示例代碼

    Node.js實現(xiàn)用戶身份驗證和授權的示例代碼

    在web開發(fā)中,我們常常需要對一些敏感的url進行訪問權限控制,本文主要介紹了Node.js實現(xiàn)用戶身份驗證和授權的示例代碼,具有一定的參考價值,感興趣的了解一下
    2024-02-02
  • 在Node.js中將SVG圖像轉換為PNG,JPEG,TIFF,WEBP和HEIF格式的方法

    在Node.js中將SVG圖像轉換為PNG,JPEG,TIFF,WEBP和HEIF格式的方法

    這篇文章主要介紹了在Node.js中將SVG圖像轉換為PNG,JPEG,TIFF,WEBP和HEIF格式的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • 使用Node.js實現(xiàn)一個文章生成器

    使用Node.js實現(xiàn)一個文章生成器

    本文將從零開始,講解如何使用Node.js來實現(xiàn)一個文章生成器,node里面有很多優(yōu)秀的模塊,現(xiàn)在我們就借助node的fs模塊來操控文本,來實現(xiàn)我們想要的效果,感興趣的小伙伴跟著小編一起來看看吧
    2024-07-07
  • 阿里云ecs服務器中安裝部署node.js的步驟

    阿里云ecs服務器中安裝部署node.js的步驟

    這篇文章給大家介紹了在阿里云ecs服務器中安裝部署node.js的詳細步驟,對大家安裝node.js具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。
    2016-10-10
  • NodeJS模塊Buffer原理及使用方法解析

    NodeJS模塊Buffer原理及使用方法解析

    這篇文章主要介紹了NodeJS模塊Buffer原理及使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 深入學習nodejs中的async模塊的使用方法

    深入學習nodejs中的async模塊的使用方法

    本篇文章主要介紹了nodejs中的async模塊的使用方法,具有一定的參考價值,有興趣的可以了解一下
    2017-07-07
  • 舉例講解Node.js中的Writable對象

    舉例講解Node.js中的Writable對象

    這篇文章主要介紹了舉例講解Node.js中的Writable對象,是Node.js入門學習中的基礎知識,需要的朋友可以參考下
    2015-07-07
  • 使用Node.js實現(xiàn)一個多人游戲服務器引擎

    使用Node.js實現(xiàn)一個多人游戲服務器引擎

    這篇文章主要給大家介紹了關于如何使用Node.js實現(xiàn)一個多人游戲服務器引擎的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Node.js具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • Nodejs的express使用教程

    Nodejs的express使用教程

    Express 是一個簡潔、靈活的 node.js Web 應用開發(fā)框架, 它提供一系列強大的特性,幫助你創(chuàng)建各種 Web 和移動設備應用,本篇文章給大家介紹nodejs的express使用教程,感興趣的朋友參考下
    2015-11-11

最新評論