nodejs + оболочка (ожидание) + дочерний_процесс

у меня небольшая проблема с созданием javascript.

у меня есть js, который порождает сценарий оболочки (ожидается, что ssh другой компьютер и отправляет некоторые данные обратно в nodejs.

у меня проблема с многопоточностью.

var cons = spawn('./somescript');
var content;
cons.stdout.on('data', function(block)
{
content += block;
mrdialist = JSON.parse(block);
....
console.log("" + block);
});
console.log("hjdfsdf");
here is some actions with loaded and parced data.

но когда я пытаюсь выполнить jscript, он начинается с самого начала и делает все действия через загрузку данных без загрузки и разбора, как я могу продолжить выполнение кода onlu, после выполнения

    console.log("" + block);
    });
    console.log("hjdfsdf");

person Barterio    schedule 11.10.2013    source источник


Ответы (1)


spawn будет выполняться асинхронно. вы должны выполнить свой код, когда событие close будет испущено.

var cons = spawn('./somescript');
var content;
cons.stdout.on('data', function(block)
{
content += block;
mrdialist = JSON.parse(block);
....
console.log("" + block);
});

cons.on('close', function () {
    console.log("hjdfsdf");
    // manipulate content
    console.log("content", content);
});
person peernohell    schedule 11.10.2013
comment
это вопрос как это сделать - person Barterio; 11.10.2013
comment
он по-прежнему продолжает выполнять весь скрипт, даже после включения ('закрыть') - person Barterio; 11.10.2013
comment
да. любой последующий код будет выполняться напрямую, не дожидаясь выполнения spawn. Вы не можете сделать синхронный process_child, поэтому вам нужно поместить весь код, который вы хотите выполнить после появления, внутри функции, подключенной к событию закрытия. - person peernohell; 11.10.2013
comment
а что мне делать, если на этом скрипте не единственная задача? если у меня есть несколько задач при запросе ответа ssh? - person Barterio; 11.10.2013
comment
вы должны поставить все свои задачи на событие закрытия. вы можете разделить многие функции, так как вы вызываете функцию on много раз. но постарайтесь избежать ада обратного вызова callbackhell.com - person peernohell; 13.10.2013