node中对于定时器timeout.unref()与clearTimeout() clearInterval()区别
先贴官方文档对于timeout.unref()的解释:当调用时,活动的 Timeout
对象不要求 Node.js 事件循环保持活动。 如果没有其他活动保持事件循环运行,则进程可能在 Timeout
对象的回调被调用之前退出。 多次调用 timeout.unref()
没有效果。
通俗易懂的解释就是:只有当目前的进程中只有一个定时器,且这个定时器对象调用了unref方法时,才会不去调用timeout对象的回调函数。
看例子:
1 a===>> var timer = setInterval(function () { 2 console.log(new Date, 1) 3 }, 1000) 4 5 var fn = function () { 6 console.log(new Date, 2) 7 } 8 9 var timer2 = setInterval(fn, 1000) 10 11 timer2.unref()
timer2.unref()这句不起作用。其实不是,再回想之前的原理:如果调用了unref函数的定时器在事件循环中是仅存在的一个, 那么程序不会继续运行下去;
函数中a处如果被注释掉, 此时相当于事件循环队列中只有一个timer2因此程序退出,如果把a处的setInterval换成setTimeout即让timer也仅运行一次, 那么timer和timer2都只会允许一次,
我理解的是timer 在的时候timer2在事件队列中不是唯一的因此它会继续执行.
至此,我认为已经把timeout.unref()的原理解释清了。接下来说下clear,我理解他就是彻底清除了预定的定时器。
unref
分类:
node.js学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)