我希望能够检测当前脚本是否挂起。要做到这一点,我想做这样的事情:
setWeakTimeout(function() {
console.log("Your script is hanging!")
}, 5000)
正常setTimeout
将无效,因为进程将始终等待调用超时回调。当脚本没有更多的处理延续时,我需要一些自动取消的东西。这可能吗?
答案 0 :(得分:4)
您可以使用unref
:
function setWeakTimeout() {
var ret = setTimeout.apply(this, arguments);
ret.unref()
return ret;
}
setWeakTimeout(function() {
console.log("Your script is hanging!")
}, 5000)
调用unref
会使Node在退出之前不等待此超时完成。上面的代码会马上退出。如果你注释掉unref
的号码,它会挂起5秒钟。
答案 1 :(得分:0)
如果我理解正确,你只需要定义一个全局:
var t = setTimeout(function() {
console.log("Your script is hanging!");
}, 5000);
一旦脚本完成所有它就必须着火
clearTimeout(t);
答案 2 :(得分:0)
您可以将clearTimeout(以及其他内容,例如关闭数据库连接)放在:
中process.on('exit', function () {
clearTimeout (t); // from freakish's answer
// db.end ();
console.log( "App ending..." );
});
总是很乐意进行清理。