保持proc.stdout.on()结果?

时间:2011-04-11 02:58:23

标签: javascript javascript-events node.js

我对javascript很新,特别是在服务器端。我正在使用node.js并拥有以下代码:

var results = modulex.commandy(args)

其中modulex看起来像:

export.commandy = function(args) {
  var output;
  var pingproc = spawn('ping', ['-c 1', 'host.com']);
  pingproc.stdout.on('data', function (data) {
    output += data;
  });

  return output;
}

如果我希望commandy函数从进程返回stdout的结果,我该怎么做?在调用stdout的回调之前,commandy函数不会完成吗?在上面的代码中,output总是未定义

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

问题是你在事件被触发之前返回结果。该函数将立即返回,但事件尚未触发pingproc.stdout.on('data');您需要使用回调。类似的东西:

modulex.commandy(function(output) { /*whatever you need w/ the output here */ });

然后

export.commandy = function(args, callback) {
  var output;
  var pingproc = spawn('ping', ['-c 1', 'host.com']);
  pingproc.stdout.on('data', function (data) {
    callback(data);
  });
}

每次收到数据时,这将调用您在function(output) {}中传递的函数。或者,您可以在收到一定数量的数据后调用回调,或者在调用结束事件后调用回调。