节点双工流在读取时实际上并未发出数据

问题描述 投票:1回答:1

我正在研究一种数据接收器,该数据接收器最终将用于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中的键值对象流。我偶然发现了双工流,并开始与它们玩耍以弄湿我的脚,...

javascript node.js duplex node-streams
1个回答
0
投票

OP提供的代码中的一些观察结果:

© www.soinside.com 2019 - 2024. All rights reserved.