TS双工Steam Duplex 最简例子

// 实现一个简单自定义的duplex需要定义好两个方法read和write
import { Duplex } from 'node:stream'
let index = 0;
let s = new Duplex({
    read(){
        console.log(index)
        if(index++<4){
            this.push('b');
        } else {
            this.push(null); 
        }
    },
    write(chunk,encoding,cb){
        var a = chunk.toString().toUpperCase()
        console.log(`duplex write -->`, a);
        cb();
    }
});

//process.stdin 标准输入流
//proces.stdout标准输出流
process.stdin.pipe(s)
s.pipe(process.stdout)

运行后会输出类似:

0
1
b2
b3
b4
b
duplex write -->

A
duplex write --> A

a
duplex write --> A

b
duplex write --> B

解释一下:
1、建立一个自定义Duplex;
2、将标准输入流(stdin) pipe 进 Duplex;
3、将 Duplex pipe 进标准输出流(stdout);
4、stdout 会在 pipe 初始时,尝试读取一次,触发了 Duplex 的 read;
5、Duplex 在给出 4次的 index 之后,才 push(null) ,意味着EOF。如果在此之后push会报错 Error [ERR_STREAM_PUSH_AFTER_EOF]: stream.push() after EOF;
6、后面每一次从控制台输入字符回车,都会回调到 Duplex 的 write 。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值