Node.js 节点8和节点10在处理流和流事件方面的差异?

Node.js 节点8和节点10在处理流和流事件方面的差异?,node.js,Node.js,在Node 10.24.1中,使用axios下载文件(readStream)的流。如果我添加该流以在管道传输到可写流之前的某些事件中监视内存,则该流将更改为暂停 readStream.on('data', (data) => { process.memoryUsage(); }) .on('error', (error) => { console.log('err: ' + error); }) .on('readable', () => { console.lo

在Node 10.24.1中,使用axios下载文件(readStream)的流。如果我添加该流以在管道传输到可写流之前的某些事件中监视内存,则该流将更改为暂停

readStream.on('data', (data) => {
  process.memoryUsage();
})
.on('error', (error) => {
  console.log('err: ' + error);
 })
.on('readable', () => {
  console.log('stream state:  ' + readStream.isPaused());
 })
它只是在“readable”事件处停止,并向我显示readStream已暂停,并且不会在本地写入文件:

readStream.pipe(fs.createWriteStream('C:\\file.mp4'));
如果我删除带有事件的代码,然后通过管道传输文件,它就会工作

然而,在节点8.17.1中,数据流过,每当它接收到数据块并继续在本地写入文件时,我就可以看到内存使用情况

我试图找出我们之间的区别以及我做错了什么。我已经阅读了文档并浏览了各种资源,但仍然没有得到它。
如果您能帮助我解决这个问题并理解流和事件,我将不胜感激。

node v10文档明确说明了以下内容:

  • 添加“可读”事件处理程序会自动使流停止流动
  • 如果同时使用“readable”和“data”,则在控制流时,“readable”优先,即只有在调用stream.read()时才会发出“data”
因此,对于v10观察到的行为,这应该是清楚的

但不确定v8的确切预期性能。请注意,无论哪种方式,
数据
可读
事件在本质上都有点冲突-一个导致数据自动推出流,另一个导致数据按需拉入。所以,也许最安全的办法就是不要把它们混在一起