非阻塞 setTimeout
Non-blocking setTimeout
是否可以在 NodeJS 中实现一个 setTimeout
版本,在最后一行代码完成后不会阻止进程退出?
即如果进程仍然是 运行.
,则只会触发回调函数的条件 setTimeout
实际例子:
当实现一个通过设置一些超时来初始化自身的库时,您会希望应用程序完成后,您不需要显式调用该库来清除所有超时,并让应用程序无论如何都会关闭。
如果您查看 setTimeout 的文档,您会注意到它 return 是一个 timeoutObject,可用于通过 clearTimeout(obj)
.
取消超时
所以你可以做的是通过存储它们的 id 对象来跟踪你创建的所有超时。然后你可以随时结束所有超时。
如果你只想退出进程,忽略其他一切,你可以只使用process.exit()
(如果你想return一个非零错误代码,则传递一个参数)。
如果您想维护对所有未完成计时器的引用,然后在应用程序退出过程中清除它们,您可以使用 clearTimeout
,但在节点中使用 unref()
更容易Node doc on unref
。结果是任何 unref
ed 计时器都不会阻止 Node 退出。
例如:
var to = setTimeout(myFunction,delay);
to.unref();
也适用于 setInterval
setInterval(myFunction,delay).unref();
是否可以在 NodeJS 中实现一个 setTimeout
版本,在最后一行代码完成后不会阻止进程退出?
即如果进程仍然是 运行.
,则只会触发回调函数的条件setTimeout
实际例子:
当实现一个通过设置一些超时来初始化自身的库时,您会希望应用程序完成后,您不需要显式调用该库来清除所有超时,并让应用程序无论如何都会关闭。
如果您查看 setTimeout 的文档,您会注意到它 return 是一个 timeoutObject,可用于通过 clearTimeout(obj)
.
所以你可以做的是通过存储它们的 id 对象来跟踪你创建的所有超时。然后你可以随时结束所有超时。
如果你只想退出进程,忽略其他一切,你可以只使用process.exit()
(如果你想return一个非零错误代码,则传递一个参数)。
如果您想维护对所有未完成计时器的引用,然后在应用程序退出过程中清除它们,您可以使用 clearTimeout
,但在节点中使用 unref()
更容易Node doc on unref
。结果是任何 unref
ed 计时器都不会阻止 Node 退出。
例如:
var to = setTimeout(myFunction,delay);
to.unref();
也适用于 setInterval
setInterval(myFunction,delay).unref();