如何确保我们倾听孩子的过程'它们发生之前的事件?

时间:2016-02-17 17:31:58

标签: node.js spawn

这是一些产生linux ls命令并提示其结果的node.js代码

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事件。在我附加事件监听器之前,可能已发生{em}。

有没有办法在启动子流程之前附加事件监听器?

注意:我不认为我可以围绕stdout函数包装Promise以使其工作,因为它依赖于正确捕获事件以触发成功/失败(导致问题)

1 个答案:

答案 0 :(得分:3)

这里没有问题。

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

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