node.js中有定时器吗

WBOY
发布: 2022-07-04 17:28:51
原创
2066人浏览过
“node.js”中有定时器;“node.js”中的定时器模块包含了一定时间执行一遍代码的函数,定时器不必通过require()的方式引入,因为所有的方法都是模拟浏览器中JavaScript函数,是全局的;“node.js”中的定时器函数实现了与web浏览器提供的定时器API类似的API。

node.js中有定时器吗

本文操作环境:Windows10系统、nodejs 12.19.0版、Dell G3电脑。

node.js中有定时器

Node.js 中的定时器

Node.js 中的定时器模块包含了隔一定时间执行一遍代码的函数。定时器不必通过 require() 的方式引入,因为所有这些方法都是模拟浏览器中 JavaScript 函数,是全局的。为了更好的全面理解何时这些函数将执行,阅读 Node.js 中事件轮询是一个好主意。

用 Node.js 控制时间的连续

Node.js 中的 API 函数提供了几种方式,允许代码从现在时间之后的某个时刻开始执行。以下给出的函数看上去很相似,因为它们在大多数浏览器中都可用。但是 Node.js 实际上提供了它自己的实现。定时器与系统非常紧密地结合在一起,尽管这些 API 是浏览器中函数的翻版,但是仍然在实现上有所不同。

timer 用于安排函数在未来某个时间点被调用,Node.js 中的定时器函数实现了与 Web 浏览器提供的定时器 API 类似的 API,但是使用了事件循环实现,Node.js 中有四个相关的方法

setTimeout(callback, delay[, ...args])
setInterval(callback[, ...args])
setImmediate(callback[, ...args])
process.nextTick(callback[, ...args])
登录后复制

示例如下:

setTimeout() 可被用来在一段指定时间之后执行某个代码任务。此函数与浏览器 JavaScript 函数 window.setTimeout() 很相似,但是你不能把一串字符串传入执行。

setTimeout() 接受一个可执行的函数作为其第一个参数,然后有一个毫秒为单位的延时时间作为第二个参数。其余的参数也可纳入其中,作为传给此函数的参数使用。以下是一个例子:

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

因为使用了 setTimeout(),以上函数 myFunc() 将在 1500 毫秒(或者1.5秒)左右时执行。

设置的定时间隔不能保证每次都是以 精准 的毫秒间隔数执行代码,这是因为其它阻塞或者正在事件轮询上处理的代码将推迟此定时的执行。唯一 保证的是定时器不会比声明的时间间隔 提早 执行。

setTimeout() 返回一个 Timeout 对象,可通过该对象引用到设置的定时器。这个返回的对象可以被用来取消定时(见下面的 clearTimeout() 部分),同时还可以改变执行行为(见下面的 unref() 部分)。

有道小P
有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

有道小P 64
查看详情 有道小P

"在此之后立即执行" setImmediate()

setImmediate() 将在当前事件轮询的末尾处执行。 本代码将在当前事件轮询中的任何 I/O 操作 后,在任何下一轮定时器 前 执行。代码执行可以被认为是“在此之后立即执行”,这意味着任何紧跟着 setImmediate() 函数调用将在 setImmediate() 函数参数前执行。

setImmediate() 的第一个参数是要执行的函数,当执行时,后面的参数将作为参数传入这个函数中。这是一个例子:

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

传入 setImmediate() 的上述函数将在任何可执行的代码执行完后执行,所以输出结果是:

before immediate
after immediate
executing immediate: so immediate
登录后复制

setImmediate() 返回一个 Immediate 对象,它可以被用于取消安排的定时任务(见下面的 clearImmediate() )。

注意:不要把 setImmediate() 和 process.nextTick() 相混淆。它们有一些主要的差别:第一, process.nextTick() 将在任何设置好的 Immediate 以及任何安排好的 I/O 前 执行。第二, process.nextTick() 是不可擦除的,换句话说,一旦有代码使用 process.nextTick() 执行,执行无法中断,这就像一个普通函数一样,具体可以参考此教程来更好地理解 process.nextTick() 的操作。

"永远的轮询" 执行 ~ setInterval()

如果存在一块函数,它需要多次执行,setInterval() 可以派上用场。setInterval() 接受一个函数作为其参数,该函数将被运行无限次,第二个参数便是一个给定的延时毫秒数。就像 setTimeout(),其余参数可以在这之后添加,作为传递给函数调用的参数使用。另外一个和 setTimeout() 类似的地方是延时不保证精确,因为有些操作可能在事件轮询上挂住,因此可以被认为是大致的延时。如以下例子:

function intervalFunc() {
  console.log('Cant stop me now!');
}
setInterval(intervalFunc, 1500);
登录后复制

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

就像 setTimeout(),setInterval() 同样返回一个 Timeout 对象,它可以被引用并且改变设定的定时器。

推荐学习:《nodejs视频教程

以上就是node.js中有定时器吗的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号