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

Node.js execSync returning undefined but console.log works

本文关键字:console log 有效 未定义 js execSync 返回 Node      更新时间:2023-09-26

我曾经见过类似的问题,但我一辈子都不明白为什么这不起作用。下面有一个非常简单的程序,它应该包装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()实际上没有返回任何内容。其中的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);
    }
});