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,作用是在延迟多久后执行我们的代码,是一次性的事件;

setTimeout 方法的接口规范;

setTimeout(callback,delayMillSeconds,[args])
// callback 为回调函数

setTimeout 方法的使用案例;

setTimeout(
  (text) => {
    console.log(text);
  },
  500,
  "超时计时器 2 触发并停止"
);

或:

function timeoutExample(text: string) {
  console.log(text);
}
setTimeout(timeoutExample, 500, "超时计时器 1 触发并停止");

超时计时器

取消超时计时器;

当我们设置了一个时长比较长的超时计时器,如何中途取消呢?例子如下:

void (async () => {
  console.log(new Date());
  console.log("超时计时器 3 开始倒计时");
  const timer = setTimeout(
    (text) => {
      console.log(text);
    },
    30e3,
    "超时计时器 3 触发"
  );
  await sleep(2e3);
  console.log(new Date());
  console.log("取消超时计时器 3");
  clearTimeout(timer);
  console.log("超时计时器 3 停止");
})();

取消超时计时器

我们会看到,按我们的设计,2 秒钟之后就将超时计时器停掉了,而不是等到 setTimeout 初始设置的 30 秒~

间隔计时器 setInterval 的使用;

间隔计时器 setInterval,作用是在每延迟多久后执行我们的代码,是重复性、循环性的事件;

setInterval 方法的接口规范;

setInterval(callback,delayMilliSecond,[args])
// callback 为回调函数

setTimeout 方法的使用案例;

(本例为:每隔 1 秒钟执行一次指令)

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

摘抄自网络文章~

当你想在 Nodejs 中执行异步代码,并且想尽可能快的执行,那么可以选择 Nodejs 中的 setImmediate() 函数。

任何传给setImmediate()的函数参数,都是在事件循环(event loop)的下一个迭代被调用执行。

setTimeout()以0ms的延时执行函数参数,和setImmediate()类似,但是这两个谁先执行,取决于多种因素,但是这两个都是在事件循环的下一个迭代被调用执行。

用法如:

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

process.nextTick()

摘抄自网络文章~

传给process.nextTick()的函数参数,是在事件循环的本次迭代最末尾执行,当前迭代的其他操作结束立刻执行该函数参数。这意味着process.nextTick()执行总是早于setImmediate()和setTimeout().

这几个计时器的执行顺序我们亲自实验一下:

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

几个计时器的执行顺序

我们会看到其他非阻塞的命令会先执行,然后是 process.nextTick(),接着是 setImmediate,然后是 setTimeout(此处演示延迟为 0 的时候),最后是其他阻塞的命令;

这样就很清晰了吧~

计时器的一些特点(坑点);

1. setInterval 是异步方法,当 callback 函数发生阻塞,间隔计时器并不会被阻塞;

2. 由于 setInterval 是异步方法,间隔计时器并不会被 callback 函数阻塞,因此当 callback 函数发生报错,间隔计时器并不会抛错而停止,例如:

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

异步、不抛错

可以看到指令一直在执行,并不会因抛错而停止~

这样的异步和不抛错,在某些场景下可能还是会诧异,记录一下~

setTimeout 和 setInterval 执行时间是不精确的。

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

执行时间不精确

其他待后续记录~

以上就是Nodejs中的计时器使用案例解析的详细内容,更多关于Nodejs计时器的资料请关注脚本之家其它相关文章!

相关文章

  • express框架中使用jwt实现验证的方法

    express框架中使用jwt实现验证的方法

    这篇文章主要给大家介绍了关于express框架中使用jwt实现验证的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用express具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Node.js实现用户身份验证和授权的示例代码

    Node.js实现用户身份验证和授权的示例代码

    在web开发中,我们常常需要对一些敏感的url进行访问权限控制,本文主要介绍了Node.js实现用户身份验证和授权的示例代码,具有一定的参考价值,感兴趣的了解一下
    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实现一个文章生成器

    使用Node.js实现一个文章生成器

    本文将从零开始,讲解如何使用Node.js来实现一个文章生成器,node里面有很多优秀的模块,现在我们就借助node的fs模块来操控文本,来实现我们想要的效果,感兴趣的小伙伴跟着小编一起来看看吧
    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实现一个多人游戏服务器引擎

    使用Node.js实现一个多人游戏服务器引擎

    这篇文章主要给大家介绍了关于如何使用Node.js实现一个多人游戏服务器引擎的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Node.js具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Nodejs的express使用教程

    Nodejs的express使用教程

    Express 是一个简洁、灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用,本篇文章给大家介绍nodejs的express使用教程,感兴趣的朋友参考下
    2015-11-11

最新评论