公开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动(我不想在内部完成,这取决于我的调用者)。
我该如何解决这个问题?