Node.js 定时器详解:setTimeout 与 setInterval 的使用及注意事项

作者:终端旅客

时间:2026-10-29

浏览:80

本文详细介绍 Node.js 中 setTimeout 和 setInterval 定时器的基本用法、参数说明及取消机制。通过代码示例演示如何创建、执行和清除定时器,并深入解析 unref() 方法对事件循环的影响。同时指出定时器执行时间的非精确性,帮助开发者在实际项目中更准确地控制异步任务调度。

文章目录

Node.js 定时器概述

Node.js 提供了与 JavaScript 类似的计时器功能,包括超时计时器、间隔计时器和即时计时器,这些计时器结合 process.nextTick(callback) 函数共同实现事件调度。本文将重点介绍 setTimeout 和 setInterval 的具体使用方法。

setTimeout 超时计时器用法

一、setTimeout 超时计时器(与 GCD 中的 after 类似)

在 Node.js 中,可以使用内置的 setTimeout(callback, delayMillSeconds, [args]) 方法来创建超时计时器。当调用该方法时,指定的回调函数将在 delayMillSeconds 毫秒后执行。

调用 setTimeout() 会返回一个定时器对象 ID。如果在 delayMillSeconds 到期之前,将该 ID 传递给 clearTimeout(timeoutId),则可以取消该计时器的执行。


function myfunc(){
 console.log("myfunc");
};
var mytimeout=setTimeout(myfunc,1000);
clearTimeout(mytimeout);

"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js

Process finished with exit code 0

如果注释掉代码中的 clearTimeout(mytimeout); 这一行,可以看到 myfunc() 函数会被正常执行。


"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js
myfunc

Process finished with exit code 0

setInterval 间隔计时器用法

二、setInterval 间隔计时器(与 GCD 中的 dispatch_source_t 或 NSTimer 类似)

间隔计时器用于按固定的时间间隔重复执行任务。与 setTimeout 类似,Node.js 内置了 setInterval(callback, delayMilliSecond, [args]) 方法来创建并返回定时器对象 ID,并通过 clearInterval() 来取消计时器。


/**
 * Created by Administrator on 2016/3/11.
 */
function myfunc(Interval){
 console.log("myfunc "+Interval);
}
var myInterval=setInterval(myfunc,1000,"Interval");
function stopInterval(){
 clearTimeout(myInterval);
 //myInterval.unref();
}
setTimeout(stopInterval,5000);

上述代码展示了如何创建 setInterval 的回调函数 myfunc,参数为 Interval。setInterval 每隔 1 秒执行一次,而 setTimeout 在 5 秒后执行,其回调函数用于取消间隔计时器。


"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe Interval.js
myfunc Interval
myfunc Interval
myfunc Interval
myfunc Interval

Process finished with exit code 0

取消定时器引用与性能影响

三、从事件循环中取消定时器引用

当事件队列中仅存在定时器回调函数时,如果希望不再执行它们,可以使用 setInterval 和 setTimeout 返回对象的 unref() 方法,通知事件循环不再继续处理这些定时器。

当 unref() 与 setTimeout 结合使用时,需要独立的计时器来唤醒事件循环。大量使用这种机制会对性能产生影响,因此应尽量减少使用。

定时器执行时间的非精确性

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

这两个方法是将回调函数添加到事件队列中,执行时间并不精确。


function simpleTimeout(consoleTime)
{
 console.timeEnd(consoleTime);
}
console.time("twoSecond");
setTimeout(simpleTimeout,2000,"twoSecond");

console.time("oneSecond");
setTimeout(simpleTimeout,1000,"oneSecond");

console.time("fiveSecond");
setTimeout(simpleTimeout,5000,"fiveSecond");

console.time("50MillSecond");
setTimeout(simpleTimeout,50,"50MillSecond");

多次运行上述代码,输出的结果会有所不同。


"C:\Program Files (x86)\JetBrains\WebStorm 11.0.3\bin\runnerw.exe" F:\nodejs\node.exe timer.js
50MillSecond: 51ms
oneSecond: 1000ms
twoSecond: 2002ms
fiveSecond: 5001ms

Process finished with exit code 0

以上就是本文的全部内容,希望对大家学习 Node.js 中 setTimeout 和 setInterval 的使用方法有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章