2

我正在使用 Node.js 从 PostgreSQL 数据库中读取数据:

const readFromDatabase = function (callback) {
  pg.connect('pg://…', (errConnect, client, disconnect) => {
    if (errConnect) {
      return callback(errConnect);
    }

    const query = client.query('SELECT * FROM …');

    // …
  });
};

query对象现在是一个事件发射器,row只要接收到一行就会发出事件。end此外,一旦读取了所有行,它就会发出一个事件。

我现在想做的是将此事件发射器包装到 Highland.js 流中,并将其交给我的函数的调用者。基本上这应该做的工作:

const stream = highland('row', query);

callback(null, stream);

不幸的是,一旦读取了所有行,我仍然需要调用该disconnect函数,并且我不希望调用者关心这一点。那么如何在仍然能够为end事件注册回调的同时分发流呢?

我已经看到 Highland.js 提供了完全满足我需要的done函数,但它也导致流开始流动(我不想在内部做这件事,这取决于我的调用者)。

我该如何解决这个问题?

4

0 回答 0