这是一些产生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线程完全分开。我担心的是有关此过程的data
和end
事件。在我附加事件监听器之前,可能已发生{em}。
有没有办法在启动子流程之前附加事件监听器?
注意:我不认为我可以围绕stdout
函数包装Promise以使其工作,因为它依赖于正确捕获事件以触发成功/失败(导致问题)
答案 0 :(得分:3)
这里没有问题。
可读流(自节点v0.10起)具有(有限的)内部缓冲区,用于存储数据,直到您从流中读取为止。如果内部缓冲区填满,背压机制将启动,导致流停止从其源读取数据。
一旦调用.read()
或添加data
事件处理程序,内部缓冲区将开始耗尽,然后再次从其源开始读取。