Javascript Node.js execSync返回未定义但console.log工作

Javascript Node.js execSync返回未定义但console.log工作,javascript,node.js,Javascript,Node.js,我曾经见过一个类似的问题,但我一辈子都搞不明白为什么这个问题不起作用。下面我有一个非常简单的程序,它应该包装exec函数并返回结果。但是,它返回的所有内容都是未定义的。下面是函数: var exec = require('child_process').execSync; quickexec = function(command) { exec(command, function(error, stdout, stderr) { if(error) {

我曾经见过一个类似的问题,但我一辈子都搞不明白为什么这个问题不起作用。下面我有一个非常简单的程序,它应该包装exec函数并返回结果。但是,它返回的所有内容都是未定义的。下面是函数:

var exec = require('child_process').execSync;

quickexec = function(command) {
    exec(command, function(error, stdout, stderr) {
        if(error) {
            return error;
        } else {
            return stdout;
        }
    });
};
我这样称呼它
console.log(quickexec('echo-n$USER')并且我每次都未定义。但是,如果我将函数中的return改为console.log,它就会工作。我认为这是一个异步问题,这就是为什么我开始使用
execSync
,但它没有改变任何东西。

quickexec()
实际上没有返回任何东西。其中的
返回
位于异步回调中,该回调在
quickexec()
返回很久之后发生。无法同步返回异步结果。在学习如何在node.js中进行适当的异步编程时,这是一个常见问题

如果需要同步结果,可以使用,但通常最好的设计是在回调中使用异步结果

var quickexec = function(command, callback) {
    exec(command, function(error, stdout, stderr) {
        if(error) {
            callback(error);
        } else {
            callback(null, stdout);
        }
    });
};

quickexec('echo -n $USER', function(err, result) {
    // use the result here in the callback
    if (err) {
        console.log(err);
    } else {
        console.log(result);
    }
});
“我认为这是一个异步问题”是的。你为什么认为你必须首先通过回调?另外,
quickexec
不包含
return
语句。你在寻找什么解决方案?从技术上讲,这是一个复制品