如何确保我们在子进程的事件发生之前收听它们?

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主线程。我担心的是进程的 dataend 事件 stdout 可能已经发生 我附加事件侦听器之前。

有没有办法在启动该子进程之前附加事件侦听器?

注意: 我不认为我可以围绕 spawn 函数包装一个 Promise 来完成这项工作,因为它依赖于正确捕获的事件触发success/failure(回到问题)

这里没有问题

可读流(自节点 v0.10 起)有一个(有限的)内部缓冲区,用于存储数据,直到您从流中读取数据。如果内部缓冲区填满,背压机制将启动,导致流停止从其源读取数据。

调用 .read() 或添加 data 事件处理程序后,内部缓冲区将开始耗尽,然后再次开始从源读取。