Node.js: Написание функции для возврата инициализации spwn в виде строки - программирование

Node.js: Написание функции для возврата инициализации spwn в виде строки

Я пытаюсь вернуть результат этой функции в виде строки, но он продолжает возвращаться как undefined. Где я ошибаюсь?

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'));
4b9b3361

Ответ 1

Ваша функция возвращается сразу после оператора command.on. Оператор return в вашем обратном вызове для события close возвращается в никуда. return относится к обратному вызову события, а не к 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) });

Ответ 2

var spawn = require('child_process').spawn,
    command  = spawn('ls', ['/tmp/']);
command.stdout.pipe(process.stdout);

Следующая ссылка - это тот же вопрос, что и ваш.