當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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'事件。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。