js stream api流的一点笔记

js 中streamApi是个较少用到的api,该api用于解决如何消费有序的小信息块的问题,stream也就是流在使用中存在三种情况
1、流出口处理数据速度大于流入口提供数据速度(流出口偶尔闲置,可以接受)
2、流出口处理数据速度与流入口提供数据速度基本持平(理想状态)
3、流出口处理数据速度小于流入口提供数据速度(数据积压)
流中有一个内部队列用于解决数据积压的问题,然而数据积压有上限,当达到上限会使用反压通知流入口停止发送数据。

stream中有三种流:可读流、可写流、转换流
1、可读流
const readableStream = new ReadableStream({
start(controller){
controller.enqueue(将数据传入可读流)
controller.close()
}
})
通过创建可读流的实例,并在构造函数中underlyingSource参数(第一个参数)中定义start方法,方法中使用controller作为参数,controller的enqueue方法可以将值传入控制器,当传完数据后使用close关闭流

const reader = readableStream.getReader()
reader.read() // 读取数据
通过流实例的getReader方法获取读取器,流实例中有一个locked属性,该属性用于给流上锁,当获取读取器后locked的值会变为true,保证该流只能当前读取器能读取。

2、可写流
const writeableStream = new WriteableStream({
write(value){
}
})
通过创建可写流的实例,并在构造函数中underlyingSink参数(第一个参数)中定义write方法,通过实现write方法可以获取写入的数据

const writer =writeableStream.getWriter()
await writer.ready;
writer.write() // 读取数据
writer.close()
通过流实例的getWriter方法获取写入器,流实例中有一个locked属性,该属性用于给流上锁,当获取读取器后locked的值会变为true,保证该流只能当前写入器能写入。writer.ready会返回一个promise,该promise在能够向流中写入数据时resolve.

3、转换流
const {writeable,readable} = new TransformStream({
transform(chunk,controller){
controller.enqueue(chunk) // chunk是要传入流的数据
}
})
通过创建转换的实例,并在构造函数第一个参数中定义transform方法

readable.getReader()
await writeable.ready
writeable.getWriter()

转换流类似于前两种流的结合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值