Stream API
ReadableStream
表示数据源,允许你逐步读取数据块,常用于处理网络响应、文件读取、自定义数据生成等。
核心特性:
数据只能被消费一次。
支持背压(backpressure):消费者控制读取速度。
可通过
getReader()获取ReadableStreamDefaultReader支持异步迭代(
for await...of)。
创建方式
使用构建函数(自定义流)
const readable = new ReadableStream({
start(controller) {
controller.enqueue('chunk 1');
controller.enqueue('chunk 2');
controller.close(); // 结束流
}
});来自 Fetch API
读取方式
使用
reader
使用异步迭代器(推荐)
WritableStream(可写流)
表述数据目的地,允许你逐步写入数据块,如上床到服务器,写入文件等。
核心特性:
支持背压:写入时可等待“准备好”信号。
可通过
getWriter()获取WritableStreamDefaultWriter。
创建方式
写入方式
使用 writer
通过管道接收数据
TransformStream(转换流)
同时包含一个 WritableStream(输入) 和一个 ReadableStream(输出),用于中间处理数据(如压缩、加密、格式转换)。
核心特性
输入写入 → 转换逻辑 → 输出可读。
常用于
.pipeThrough()链式处理。
创建方式
使用方式:管道转换
关键概念补充
概念
说明
背压(Backpressure)
流自动协调生产者和消费者速度,防止内存溢出。
流锁定(Locked)
一旦流被 reader/writer/pipe 占用,就不能再被其他方式访问。
流不可重用
流是一次性的,关闭或取消后不能重新开始。
异步迭代支持
所有 ReadableStream 都实现 [Symbol.asyncIterator]。
最后更新于
这有帮助吗?