我正在使用 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函数,但它也导致流开始流动(我不想在内部做这件事,这取决于我的调用者)。
我该如何解决这个问题?