当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Node.js stream.Readable 'readable'事件用法及代码示例


事件:'readable'

历史
版本变化
v10.0.0

'readable' 总是在调用.push() 之后的下一个滴答声中发出。

v10.0.0

使用 'readable' 需要调用 .read()

v0.9.4

添加于:v0.9.4

'readable' 事件在有可从流中读取的数据或到达流的末尾时发出。实际上,'readable' 事件指示流具有新信息。如果数据可用, stream.read() 将返回该数据。

const readable = getReadableStreamSomehow();
readable.on('readable', function() {
  // There is some data to read now.
  let data;

  while ((data = this.read()) !== null) {
    console.log(data);
  }
});

如果已到达流的末尾,则调用 stream.read() 将返回null 并触发'end' 事件。如果从来没有任何数据要读取,这也是正确的。例如,在以下示例中,foo.txt 是一个空文件:

const fs = require('node:fs');
const rr = fs.createReadStream('foo.txt');
rr.on('readable', () => {
  console.log(`readable: ${rr.read()}`);
});
rr.on('end', () => {
  console.log('end');
});

运行此脚本的输出是:

$ node test.js
readable: null
end

在某些情况下,为'readable' 事件附加一个侦听器会导致将一些数据量读入内部缓冲区。

一般来说,readable.pipe()'data'事件机制比'readable'事件更容易理解。但是,处理 'readable' 可能会导致吞吐量增加。

如果同时使用'readable' 'data' ,则'readable'优先控制流,即只有在调用 stream.read() 时才会发出'data'readableFlowing 属性将变为 false 。如果在移除 'readable' 时有 'data' 侦听器,则流将开始流动,即 'data' 事件将在不调用 .resume() 的情况下发出。

相关用法


注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品  'readable'事件。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。