在node.js中,是否可以创建一个超时(例如setTimeout),该超时不会阻止进程完成

时间:2013-12-27 20:55:50

标签: javascript node.js

我希望能够检测当前脚本是否挂起。要做到这一点,我想做这样的事情:

setWeakTimeout(function() {
  console.log("Your script is hanging!")
}, 5000)

正常setTimeout将无效,因为进程将始终等待调用超时回调。当脚本没有更多的处理延续时,我需要一些自动取消的东西。这可能吗?

3 个答案:

答案 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..." );
});

总是很乐意进行清理。