2017-03-15 42 views
2

是否有可能创建一个不会阻止node.js退出的“弱回调”(类似于“弱引用”)?我希望能够为长时间运行的异步任务定义一个“可选处理程序”,如果node.js进程仍在运行,但它不会阻止事件队列被“空”本身。我没有一个真实世界的用例,我只是想知道node.js是否支持它(它可能需要本地扩展)。Node.js创建不会阻止进程退出的“弱回调”

这是一个非常简单的程序,调用/bin/sh -c "sleep 9 ; ls"并等待它完成。 node.js进程基本上闲置9秒,直到子进程结束。

var child_process = require("child_process"); 

child_process.exec("sleep 9 ; ls", function (err, stdout, stderr) { 
    console.log(stdout); 
}); 
console.log("end"); 

我希望能够写这样的事情,在这里我使用setTimeout所以程序是保证活着的至少三秒钟来创建一个非弱回调。 (注:child_process.exec确实有超时选项,但必须提前进行设置,而这种方法允许在事后被改变的最后期限)

var child_process = require("child_process"); 

child_process.exec_weakly("sleep 9 ; ls", function (err, stdout, stderr) { 
    console.log(stdout); 
}); 
setTimeout(function() {}, 3000); // prevent exit for at least three seconds 

console.log("end"); 

回答

1

在计时器的情况下,你可以使用unref功能这样:

let timer = setTimeout(() => { 
    console.log('tick'); 
}, 3000); 
timer.unref(); 

貌似可以do the samechild_process.spawn