Javascript Node.js execSync返回未定义但console.log工作
我曾经见过一个类似的问题,但我一辈子都搞不明白为什么这个问题不起作用。下面我有一个非常简单的程序,它应该包装exec函数并返回结果。但是,它返回的所有内容都是未定义的。下面是函数: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) {
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
语句。你在寻找什么解决方案?从技术上讲,这是一个复制品