我是Node的新手,并且遇到了一些非阻塞元素。我正在尝试创建一个对象,并让它的一个元素是一个返回child_process.exec的stdout的函数,如下所示:
var exec = require('child_process').exec;
var myObj = {};
myObj.list = function(){
var result;
exec("ls -al", function (error, stdout, stderr) {
result = stdout;
});
return result;
}
console.log('Ta da : '+myObj.list);
我认为myObj.list
在设置为result
之前正在返回stdout
,但我无法弄清楚如何让它等待或进行回调。谢谢你的帮助!
答案 0 :(得分:4)
您无法直接返回该值,因为它不会有一点可用。因此,您需要使用回调代替返回值,这意味着将调用代码内部转换一点。
var exec = require('child_process').exec;
var myObj = {};
myObj.list = function(callback){
var result;
exec("ls -al", function (error, stdout, stderr) {
callback(stdout);
});
// No return at all!
}
// Instead of taking a return we pass a callback
// which receives the value and carries on our computation.
myObj.list(function (stdout) {
console.log('Ta da : '+ stdout);
});
在实际代码中,您可能希望让回调将错误作为其第一个参数,您不必这样做,但这是在Node.JS中完成的常规方法。