Node.js execSync返回undefined但console.log有效

时间:2015-12-13 07:27:28

标签: javascript node.js

我曾经见过一个类似的问题,但我不能为我的生活弄清楚为什么这不起作用。我有一个非常简单的程序,应该包装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'));,我每次都会被定义。但是,如果我将函数中的返回值更改为console.log,则可以正常工作。我认为这是一个异步问题,这就是为什么我开始使用execSync,但它没有改变任何东西。

1 个答案:

答案 0 :(得分:0)

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

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

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);
    }
});