Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 非阻塞设置超时_Javascript_Node.js_Settimeout - Fatal编程技术网

Javascript 非阻塞设置超时

Javascript 非阻塞设置超时,javascript,node.js,settimeout,Javascript,Node.js,Settimeout,在NodeJS中是否可以实现一个版本的setTimeout,该版本不会阻止进程在最后一行代码完成后退出 i、 e.只有在进程仍在运行的情况下才会触发回调函数的条件设置超时 实例: 当实现一个通过设置一些超时来初始化自身的库时,您可能希望在应用程序完成后,不需要显式调用该库来清除所有超时,并让应用程序无论如何关闭。如果您查看文档,您会注意到,它返回一个timeoutObject,可用于通过clearTimeout(obj)取消超时 因此,您可以通过存储id对象来跟踪您创建的所有超时。然后,您可以随

在NodeJS中是否可以实现一个版本的
setTimeout
,该版本不会阻止进程在最后一行代码完成后退出

i、 e.只有在进程仍在运行的情况下才会触发回调函数的条件设置超时

实例:


当实现一个通过设置一些超时来初始化自身的库时,您可能希望在应用程序完成后,不需要显式调用该库来清除所有超时,并让应用程序无论如何关闭。

如果您查看文档,您会注意到,它返回一个timeoutObject,可用于通过
clearTimeout(obj)
取消超时

因此,您可以通过存储id对象来跟踪您创建的所有超时。然后,您可以随时结束所有超时



如果您只想退出流程,而忽略其他所有内容,则可以使用
process.exit()
(如果要返回非零错误代码,请传递一个参数)。

如果查看文档,您会注意到它返回一个timeoutObject,可用于通过
clearTimeout(obj)
取消超时

因此,您可以通过存储id对象来跟踪您创建的所有超时。然后,您可以随时结束所有超时



如果您只想退出流程,而忽略其他所有内容,则可以使用
process.exit()
(如果要返回非零错误代码,请传递参数).

如果希望维护对所有未完成计时器的引用,然后在应用程序退出过程中清除它们,则可以使用
clearTimeout
,但在节点中使用
unref()
要容易得多。其效果是,任何
unref
ed计时器都不会阻止节点退出

例如:

var to = setTimeout(myFunction,delay);
to.unref();
也适用于setInterval

setInterval(myFunction,delay).unref();

如果希望维护对所有未完成计时器的引用,然后在应用程序退出过程中清除它们,则可以使用
clearTimeout
,但在节点中使用
unref()
要容易得多。其效果是,任何
unref
ed计时器都不会阻止节点退出

例如:

var to = setTimeout(myFunction,delay);
to.unref();
也适用于setInterval

setInterval(myFunction,delay).unref();

我刚刚添加了一个示例来说明问题的要点。我扩展了我的答案。谢谢,但巴里·约翰逊给出了正确的答案。我刚刚添加了一个示例来说明问题的要点。我扩展了我的答案。谢谢,但巴里·约翰逊给出了正确的答案。回答很好!如果这是可能的话,我很悲观……:)谢谢你@维塔利-t-非常欢迎你。我认为当他们添加它时,这是一个非常好的便利。正因为如此,
clearTimeout
部分不应该出现在答案中,对于我提供的示例,只有
unref
是可用的;)@vitaly-t-如果您想维护一组对活动计时器的引用,然后在应用程序退出过程中调用某种清理功能,那么可以使用
clearTimeout
。我应该在回答的第一句话中加上这一点。只是我问题的重点是如何避免在应用程序结束时进行任何显式调用,并且仍然能够退出,这是
unref
做得很好的地方,但是
clearTimeout
在这里没有帮助:)回答得好!如果这是可能的话,我很悲观……:)谢谢你@维塔利-t-非常欢迎你。我认为当他们添加它时,这是一个非常好的便利。正因为如此,
clearTimeout
部分不应该出现在答案中,对于我提供的示例,只有
unref
是可用的;)@vitaly-t-如果您想维护一组对活动计时器的引用,然后在应用程序退出过程中调用某种清理功能,那么可以使用
clearTimeout
。我应该在回答的第一句话中添加这一点。只是我问题的重点是如何避免在应用程序结束时进行任何显式调用,并且仍然能够退出,这是
unref
做得很好的地方,但是
clearTimeout
在这里没有帮助:)