Mam problem z modułem procesu potomnego, w szczególności z child.spawn i child.fork. ja opierając się na dokumentacji child_process.fork, który mówi:Jak przekazywać wiadomości i standardowe wyjście z potomka do elementu nadrzędnego w module procesu potomnego node.js?
This is a special case of the child_process.spawn() functionality for spawning Node.js processes. In addition to having all the methods in a normal ChildProcess instance, the returned object has a communication channel built-in. See child.send(message, [sendHandle]) for details.
mam uproszczona mój problem poniżej:
parent.js jest:
var cp = require('child_process');
var n = cp.fork('./child.js');
n.send({a:1});
//n.stdout.on('data',function (data) {console.log(data);});
n.on('message', function(m) {
console.log("Received object in parent:");
console.log(m);
});
child.js jest:
process.on('message', function(myObj) {
console.log('myObj received in child:');
console.log(myObj);
myObj.a="Changed value";
process.send(myObj);
});
process.stdout.write("Msg from child");
Zgodnie z oczekiwaniami. Dane wyjściowe to:
Msg from child
myObj received in child:
{ a: 1 }
Received object in parent:
{ a: 'Changed value' }
Chcę, aby działało z komentarzem wiersza w pliku parent.js, który nie jest zaznaczony. Innymi słowy, chcę złapać stdout w procesie dziecko w n.stdout.on („dane” ... oświadczenie w procesie macierzystym Gdybym odkomentowaniu go, otrzymuję komunikat o błędzie.
n.stdout.on('data',function (data) {console.log(data);});
^
TypeError: Cannot read property 'on' of null
Nie mam nic przeciwko używaniu jakichkolwiek asynchronicznych wariacji procesu potomnego, exec, fork lub spawn. Wszelkie sugestie:
Czy ktoś może wyjaśnić - dlaczego wolisz słuchacza 'message' zamiast' danych' podczas przesyłania strumieniowego ... danych? – ymz