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

B T*_*B T 0 javascript node.js

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

setWeakTimeout(function() {
  console.log("Your script is hanging!")
}, 5000)
Run Code Online (Sandbox Code Playgroud)

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

Lou*_*uis 6

您可以使用unref

function setWeakTimeout() {
    var ret = setTimeout.apply(this, arguments);
    ret.unref()
    return ret;
}

setWeakTimeout(function() {
  console.log("Your script is hanging!")
}, 5000)
Run Code Online (Sandbox Code Playgroud)

调用unref使 Node 在退出之前不等待此超时完成。上面的代码将立即退出。如果您注释掉对 的调用unref,它将挂起 5 秒钟。