如何确保我们在子进程的事件发生之前收听它们?
How to ensure we listen to a child process' events before they occur?
这里有一些 node.js 代码生成 linux ls
命令并提示其结果
const spawn = require('child_process').spawn;
const ls = spawn('ls', ['-l']);
let content = "";
ls.stdout.on('data', function(chunk){
content += chunk.toString();
});
ls.stdout.on('end', function(){
console.log(content);
});
这很好用。但是,ls
命令是异步启动的,完全脱离了nodeJs主线程。我担心的是进程的 data
和 end
事件 stdout
可能已经发生 在 我附加事件侦听器之前。
有没有办法在启动该子进程之前附加事件侦听器?
注意: 我不认为我可以围绕 spawn
函数包装一个 Promise 来完成这项工作,因为它依赖于正确捕获的事件触发success/failure(回到问题)
这里没有问题
可读流(自节点 v0.10 起)有一个(有限的)内部缓冲区,用于存储数据,直到您从流中读取数据。如果内部缓冲区填满,背压机制将启动,导致流停止从其源读取数据。
调用 .read()
或添加 data
事件处理程序后,内部缓冲区将开始耗尽,然后再次开始从源读取。
这里有一些 node.js 代码生成 linux ls
命令并提示其结果
const spawn = require('child_process').spawn;
const ls = spawn('ls', ['-l']);
let content = "";
ls.stdout.on('data', function(chunk){
content += chunk.toString();
});
ls.stdout.on('end', function(){
console.log(content);
});
这很好用。但是,ls
命令是异步启动的,完全脱离了nodeJs主线程。我担心的是进程的 data
和 end
事件 stdout
可能已经发生 在 我附加事件侦听器之前。
有没有办法在启动该子进程之前附加事件侦听器?
注意: 我不认为我可以围绕 spawn
函数包装一个 Promise 来完成这项工作,因为它依赖于正确捕获的事件触发success/failure(回到问题)
这里没有问题
可读流(自节点 v0.10 起)有一个(有限的)内部缓冲区,用于存储数据,直到您从流中读取数据。如果内部缓冲区填满,背压机制将启动,导致流停止从其源读取数据。
调用 .read()
或添加 data
事件处理程序后,内部缓冲区将开始耗尽,然后再次开始从源读取。