【问题标题】:Node.js execSync returning undefined but console.log worksNode.js execSync 返回未定义但 console.log 有效
【发布时间】:2015-12-13 15:31:48
【问题描述】:

我曾经看过一个类似的问题,但我一生都无法弄清楚为什么这不起作用。我下面有一个非常简单的程序,它应该包装 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 的原因,但它并没有改变任何东西。

【问题讨论】:

标签: javascript node.js


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多