我对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
总是未定义。
感谢您的帮助!
答案 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) {}
中传递的函数。或者,您可以在收到一定数量的数据后调用回调,或者在调用结束事件后调用回调。