2

この関数の出力を別の関数で使用する変数に戻そうとしていますが、変数は未定義として返されます。私は何が間違っているのですか?

function run(cmd){
    var spawn = require('child_process').spawn;
    var command = spawn(cmd);
    var result = '';
      command.stdout.on('data', function(data) {
         result += data.toString();
      });
      command.on('close', function(code) {
         return result;
      });
}
var message = run("ls");
sendMessage(user, message);
4

1 に答える 1

4

あなたのrun関数は非同期です(そうだからspawnです)。結果を渡す最も簡単な方法は、結果が次の場合に呼び出されるコールバック関数を提供することです。

function run(cmd, cb) {
  var spawn = require('child_process').spawn;
  var command = spawn(cmd);
  var result = '';
  command.stdout.on('data', function(data) {
    result += data.toString();
  });
  command.on('close', function(code) {
    cb(result);
  });
}
run("ls", function(message) {
  sendMessage(user, message);
});
于 2013-03-20T06:07:43.167 に答える