Node.js创建“弱回调”,不会阻止进程退出

时间:2017-03-15 19:37:36

标签: node.js asynchronous

是否有可能创建一个“弱回调”(类似于“弱引用”),不会阻止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 个答案:

答案 0 :(得分:2)

如果是计时器,您可以使用unref这样的功能:

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

您似乎child_process.spawn可以$Script = { param($Computername) get-process -Computername $Computername } @('Srv1','Srv2') | Run-Parallel -ScriptBlock $Script