読者です 読者をやめる 読者になる 読者になる

ottatiのブログ

無職学生がネットにクソアプリをまき散らしていく様子

node-postgresとco + co-pgを使ってコールバック地獄から這い上がる

f:id:ottati:20150103125718g:plain     🍣

fkn callback hell

node-postgres

co

  • https://github.com/tj/co
  • yieldを利用して処理を止め非同期な一連の処理を同期的に処理できる
  • 対応しているyieldable objectsと言われるオブジェクトの種類 (2015/8/7)
    • promises
    • thunks (functions)
    • array (parallel execution)
    • objects (parallel execution)
    • generators (delegation)
    • generator functions (delegation)

co-pg

READE.mdよりpg.connectPromise()を使ったClient Poolingな例

var co = require('co'),
    pg = require('co-pg')(require('pg'));

var connectionString = 'postgres://postgres:1234@localhost/postgres';

co(function* poolExample() {
    try {
        var connectionResults = yield pg.connectPromise(connectionString);
        var client = connectionResults[0];
        var done = connectionResults[1];

        var result = yield client.queryPromise('select now() as "theTime"');
        //call `done()` to release the client back to the pool
        done();

        console.log(result.rows[0].theTime);
    } catch(ex) {
        console.error(ex.toString());
    }
});

pg-nativeを使用する時はpg = require('co-pg')(require('pg').native);でおk

四万十川のように綺麗