MST

星途 面试题库

面试题:Node.js中Readable流的暂停与恢复机制

在Node.js的可读流Readable中,如何实现暂停和恢复读取数据?请说明其原理,并给出简单代码示例。
26.0万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试

暂停和恢复读取数据的实现方法及原理

在Node.js的可读流Readable中,通过调用pause()方法来暂停读取数据,调用resume()方法来恢复读取数据。

原理

  • pause()方法会停止触发data事件,并且暂停底层资源的读取操作。这使得数据不会继续流入缓冲区,从而可以控制数据的读取节奏。
  • resume()方法会重新开始触发data事件,继续从底层资源读取数据,并将数据推送到缓冲区,然后通过data事件进行分发。

简单代码示例

const fs = require('fs');

// 创建一个可读流
const readableStream = fs.createReadStream('example.txt');

// 监听data事件,处理读取到的数据
readableStream.on('data', (chunk) => {
  console.log('Received chunk:', chunk.toString());
  // 暂停读取
  readableStream.pause();
  console.log('Reading paused.');

  // 设置一个定时器,模拟一些异步操作
  setTimeout(() => {
    // 恢复读取
    readableStream.resume();
    console.log('Reading resumed.');
  }, 2000);
});

// 监听end事件,当读取结束时触发
readableStream.on('end', () => {
  console.log('All data has been read.');
});

上述代码中,首先创建了一个可读流来读取文件example.txt。当接收到数据块时,打印数据块并暂停读取,两秒后恢复读取。当所有数据读取完毕,触发end事件并打印提示信息。