time.unref 没有按预期取消对应的函数回调
发布于 8 年前 作者 dmodaii 3292 次预览 最后一次回复是 8 年前 来自 问答
var timer = setInterval(function () {
console.log(new Date, 1)
}, 1000)
var fn = function () {
console.log(new Date, 2)
}
var timer2 = setInterval(fn, 1000)
timer2.unref()
在这里一直会间断输出1, 2, 为什么timer2 的回调没有被取消
- 使timer2正常unref 1.但是将timer 这段代码去除就可以正常的取消timer2 的回调了, 2、timer 也加上 unref
难道是永远只能有一个setInterval 在event loop中才能使用unref 生效吗
9 回复
目前百度出来的中文内容都只说了一半,看官方文档:
注意 if it is the only item left in the event loop. 你的代码里有两个timer,当然就不会不执行回调函数了
没弄清楚,你说的时间的关系是啥意思。
unref的意义和作用,官方文档写的挺清楚的场景的话,相信你理解了文档,也就能想明白了
另外关于unref有个经典的回答,你可以看下coordcn的回答
取消回调不是
unref… 而是clearInterval…@Daniel1989 受教
@soda-wy 受教, 谢谢
@atian25 这里主要说unref 不管clearInterval
因为你没有调用
clearInterval所以从来没有什么取消回调。 你之所以觉得取消回调,是因为 unref 两个 timer 后,或者去掉 timer 后,整个 event loop 就没有东西了,就会整个进程退出,所以 timer2 被自动回收了。setTimeout 是一次性的… 执行完了就没了,然后
timer2.unref()后也不在 event loop 了… 程序就退出了…