我正在尝试使用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是否正常执行?我应该用投掷返回承诺捕获吗?
我问这一切,因为我发现的所有例子都与我的不同,但我的代码对我来说似乎是正确的!那么,我的代码是正确的还是我错过了一些重要的东西?对于如此复杂的任务,似乎代码太少了!