如果有一个 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




