Skip to content

ReadableStream

ReadableStream 用于流式数据传输,每个流(stream)分为若干个不同大小、类型的数据块(chunk),通过浏览器内部的队列依次传输,最终被 reader 读取和消费。

每个流同时只能有一个 reader 读取,与之相配套的还有一个 controller,负责流的启动、暂停、关闭等管理操作。reader 和其他处理数据的代码统称为消费者(consumer)。

流式传输的数据源可以分为推流(push)和拉流(pull):

  • 推流:视频直播、Websocket
  • 拉流:fetch

ReadableStream 是异步可迭代的(async iterable),可以通过 for await...of 访问,Response.body 就是一个 ReadableStream。

js
async function readData(url) {
  const response = await fetch(url);
  for await (const chunk of response.body) {
    // 处理每个 chunk
  }
}