暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

背井 2021-04-17
1426

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

console.log(1);

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

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

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

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

很好理解,这是因为 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字


文章转载自背井,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论