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