我正在研究一种数据接收器,该数据接收器最终将用于nodejs中的键值对象流。
我偶然发现了双工流,并开始与它们玩耍以弄湿自己的脚,但是我尝试的所有操作似乎都不起作用。
目前,我有此双工流:
class StorageStream extends stream.Duplex { constructor() { super({ objectMode: true }) this.values = new Map(); this.entries = this.values.entries(); } _write(data, encoding, next) { const { key, value } = data; this.values.set(key, value); next(); } _read() { const next = this.entries.next(); if (next.value) { this.push(next.value); } } }
这是一个SUPER CONTRIVED示例,但是从本质上讲,当我向该流写入内容时,它应该将键和值存储在Map中,而当我从该流中读取时,它应该开始从映射中读取并将它们向下传递给流。但是,这不起作用,基本上执行以下操作
const kvstream = createKVStreamSomeHow(); // a basic, readable stream with KV Pairs const logger = createLoggerStreamSomeHow(); // writable stream, logs the data coming through const storage = new StorageStream(); kvstream.pipe(storage).pipe(logger);
导致该过程刚刚结束。因此,我想对
_read
方法内部应该做的事情感到有些困惑。
我正在研究一种数据接收器,该数据接收器最终将用于nodejs中的键值对象流。我偶然发现了双工流,并开始与它们玩耍以弄湿我的脚,...
OP提供的代码中的一些观察结果: