我曾经见过一个类似的问题,但我不能为我的生活弄清楚为什么这不起作用。我有一个非常简单的程序,应该包装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
,但它没有改变任何东西。
答案 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);
}
});