MySQL,汇集和Bluebird承诺

时间:2018-02-17 08:33:54

标签: mysql node.js promise bluebird

我正在尝试使用MySQL池设置Promise。我的'db.js'模块是这样的:

var mysql = require('mysql');
var Promise = require('bluebird');

Promise.promisifyAll(require('mysql/lib/Connection').prototype);
Promise.promisifyAll(require('mysql/lib/Pool').prototype);

function db(config) {
  this.pool = mysql.createPool(config);
}

db.prototype.query = function(query) {
  return this.pool.getConnectionAsync()
    .then((db) => {
      return db.queryAsync(query).then(function(arg) {
        db.release();
        try {
          return JSON.parse(JSON.stringify(arg));
        }
        catch(e) {
          throw e;
        }
      });
    })
    .catch((err) => {
      db.release();
      throw err;
    });
}

module.exports = db;

当我想执行查询时,我按照以下步骤操作:

var _db = require('./db');
var db = new _db(config.get('db'));
db.query('select * from users')
  .then((result) => {
    console.log(result);
  })
  .catch((err) => {
    console.log(err);
  });

我使用的方案是否正确?我是否正确释放连接? queryAsync中的同步try / catch是否正常执行?我应该用投掷返回承诺捕获吗?

我问这一切,因为我发现的所有例子都与我的不同,但我的代码对我来说似乎是正确的!那么,我的代码是正确的还是我错过了一些重要的东西?对于如此复杂的任务,似乎代码太少了!

0 个答案:

没有答案