Javascript 我有一个执行流问题,其中包含nodejs子进程

Javascript 我有一个执行流问题,其中包含nodejs子进程,javascript,node.js,child-process,Javascript,Node.js,Child Process,我想创建一个函数,该函数接收作为输入的字符串,并以字符串形式返回输出,但由于响应延迟,我无法创建该函数 var resultado = "old value"; function execShell(cmd) { exec("uname", (error, data, getter) => { if(error){ console.log("error",error.message); return;

我想创建一个函数,该函数接收作为输入的字符串,并以字符串形式返回输出,但由于响应延迟,我无法创建该函数

var resultado = "old value";

function execShell(cmd) {

exec("uname", (error, data, getter) => {
  if(error){
    console.log("error",error.message);
    return;
  }
  if(getter){
    console.log("data",data);
    return;
  }
  console.log(`need before exec: ${data}`);
  resultado = data;

});
}

/* shell command for Linux */

execShell('uname');

console.log(`need after exec: ${resultado}`);

这里发生的是,回调不是从上到下执行的。这意味着
console.log(执行后需要:${resultado})
直接在
execShell
之后调用,子进程尚未返回

您可以使用同步版本执行它:

const cp=require(“子进程”);
const result=cp.execSync(“uname”).toString();//.toString()用于将缓冲区转换为字符串
log(`result after exec${result}`);
这些文件是


如果您正在构建一个NPM包,那么您可以使用一个NPM包来帮助shell处理:它用一个更简单的API封装了许多子流程部件。

您的答案是最简单的形式。或者,他需要学习异步上下文来运行异步任务。