繁体   English   中英

Node.js execSync返回未定义但console.log有效

[英]Node.js execSync returning undefined but console.log works

我曾经见过类似的问题,但我一生无法弄清楚为什么这行不通。 我下面有一个非常简单的程序,应该包装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 ,但是它没有任何改变。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM