我遇到了在node.js中执行异步shell的问题。
在我的例子中,node.js安装在raspberry pi上的Linux操作系统上。我想用一个在pi上调用的shell脚本解析的值来填充一个数组。这很好,但exec()函数是异步调用的。
我需要将函数设置为绝对同步,以免弄乱我的整个系统。有没有办法实现这个目标?目前我正在尝试一个名为.exe的lib,但代码似乎仍然表现为异步。
这是我的代码:
function execute(cmd, cb)
{
child = exec(cmd, function(error, stdout, stderr)
{
cb(stdout, stderr);
});
}
function chooseGroup()
{
var groups = [];
execute("bash /home/pi/scripts/group_show.sh", function(stdout, stderr)
{
groups_str = stdout;
groups = groups_str.split("\n");
});
return groups;
}
//Test
console.log(chooseGroup());
答案 0 :(得分:0)
如果您使用的是child_process.exec,则它已经异步。
您的chooseGroup()
函数无法正常工作,因为它是异步的。 groups
变量将始终为空。
如果你改变它,你的chooseGroup()
功能可以工作:
function chooseGroup() {
execute("bash /home/pi/scripts/group_show.sh", function(stdout, stderr) {
var groups = stdout.split("\n");
// put the code here that uses groups
console.log(groups);
});
}
// you cannot use groups here because the result is obtained asynchronously
// and thus is not yet available here.
如果出于某种原因,您正在寻找.exec()
的同步版本,那么child_process.execSync()
虽然在基于服务器的代码中很少推荐,但因为它是阻塞的,因此阻止在node.js运行时执行其他事情。