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'));
,每次都会被定义。但是,如果我将函数中的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);
}
});
相关文章:
- Array.length似乎不起作用;console.log则显示其他情况
- 有没有一种方法可以在控制台关闭的情况下让console.log()在IE中记录消息
- console.log以外的Javascript输出函数
- 如果在代码末尾进行求值,jQuery-console.log将提供空数组
- 为什么生成器中的console.log会按这样的顺序出现
- async问题,JS Promise无法返回结果,但可以使用console.log
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- 我应该返回一个类似console.log()的方法调用吗
- console.log无法运行Mac OS X
- 如何使console.log可配置
- 如何使用console.log语句在Mocha中测试函数
- 为什么我可以't直接将console.log()设置为回调函数
- Node.js/Express未输出console.log,highcharts.js给出未定义的错误
- console.log在角度控制器内不工作
- Mocking console.log()/MOCHA测试框架中的任何其他函数
- 如何使用console.log在因果报应测试中检查函数
- Console.log - getElementsByClassName
- nodejs console.log of object
- 监视JavaScript输出,例如console.log()
- AngularJS:console.log不显示任何内容