node-mysqlのコールバック地獄をthunkifyでなんとかする でやったthunkify使わずにPromiseでやるやつです。
thunkifyより柔軟な処理ができるかもしれません。
db.query(‘SELECT … ‘, function(err, rows) {}) の代わりにPromiseな db.exec() も同じように用意してます。
'use strict'; // pool connection + Promise var mysql = require('mysql2'), pool; function getPoolConnection() { if (!pool) pool = mysql.createPool({host: '***', user: '***', password: '***'}); return new Promise(function(resolve, reject) { pool.getConnection(function(err, connection) { if (err) { reject(err); } else { // conn.exec = <Promise> connection.exec = function(query) { return new Promise(function(res, rej) { connection.query(query, function(err, rows) { err ? rej(err) : res(rows); }); }); } resolve(connection); } }); }); }
// then, catchを使う…… と、あまり変わらないけれど function example1() { getPoolConnection() .then(function(db) { db.exec('SELECT * FROM ... ') .then(function(rows) { console.log(rows); db.release(); }) }) } // generator functionを使う function* example2() { var db = yield getPoolConnection(); var res = yield db.exec('SELECT * FROM ....'); console.log(res); db.release(); } // coでもいい co(function* () { var db = yield getPoolConnection(); var res = yield db.exec('SELECT * FROM ....'); console.log(res); db.release(); })