公开Highland.jsstream,但在内部处理结束事件

我正在使用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.jsstream,并把它交给我的函数的调用者。 基本上这应该做的工作:

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

不幸的是,一旦所有行都被读取,我仍然需要调用disconnect函数,而且我不希望调用者关心这个。 那么我怎样才能发送stream,同时仍然能够注册end事件的callback?

我已经看到Highland.js提供了完成我所需要的完成function,但是它也导致stream开始stream动(我不想在内部完成,这取决于我的调用者)。

我该如何解决这个问题?