3

我是 Node 的新手,偶然发现了它的一些非阻塞元素。我正在尝试创建一个对象,并且它的元素之一是返回 child_process.exec 的标准输出的函数,如下所示:

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返回,但我不知道如何让它等待或为它做回调。谢谢你的帮助!resultstdout

4

1 回答 1

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 中完成的正常方式。

于 2012-04-22T19:35:03.667 回答