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関数を提供することを見てきましたが、ストリームが流れ始めます (これは内部で実行したくありません。それは呼び出し元次第です)。
どうすればこれを解決できますか?