不让定时器影响Node.js进程的退出

如果有一个 a.js ,它的文件内容如下:

console.log(1);

当使用 node a.js 运行时,它会打印 1 并退出进程。这是因为当 evnetloop 任务队列中没有更多的任务时,就会自动罢工

如果我们将文件内容改为如下:

console.log(1);

const timer = setInterval(() => {
    console.log(new Date"=> I'm alive!");
}, 1000);

运行它,进程就会保持运行,并一直有日志打印出来。

不让定时器影响Node.js进程的退出

很好理解,这是因为 setInterval() 会一直往任务队列里加任务。

但有一些情况,我们希望在做主工作 A 时,让定时任务做一些非必要的辅助工作 B,当 A 完成后,整个进程自动退出,不用去考虑 B。即,忽略某些定时器对进程退出的阻碍。

怎么做呢?

其实 setInterval() 返回的是一个 Timeout 对象(setTimeout也是),该对象有一个 unref() 方法就是做这件事的。

所以我们可以这样写:

console.log(1);

const timer = setInterval(() => {
    console.log(new Date"=> I'm alive!");
}, 1000);

timer.unref();

同理,你也可以用 ref() 方法恢复默认效果。


原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字 原创300字


原文始发于微信公众号(背井):不让定时器影响Node.js进程的退出

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/246654.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!