31

この関数の出力を文字列として返そうとしていますが、未定義として返され続けます。どこが間違っていますか?

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;
    });
}
console.log(run('ls'));
4

4 に答える 4

49

command.on関数はステートメントの直後に戻ります。イベントのコールバック内のreturnステートメントはどこにも返されません。closereturnではなく、イベント コールバックに属しますrun()

console.logの代わりに呼び出しを入れますreturn result

一般的に言えば、次のように書く必要があります。

function run(cmd, callback) {
    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 callback(result);
    });
}

run("ls", function(result) { console.log(result) });
于 2013-03-20T04:53:31.087 に答える
5
var spawn = require('child_process').spawn,
    command  = spawn('ls', ['/tmp/']);
command.stdout.pipe(process.stdout);

次のリンクはあなたとまったく同じ質問です。

于 2013-03-20T04:52:10.320 に答える