pky*_*eck 7 mysql connection-pooling node.js node-mysql
我正在使用node-mysql连接池的驱动程序.
当只有一个查询时,将连接释放回池中很容易:
pool.getConnection(function(err, connection) {
if (err) {
throw err;
}
query = "SELECT * FROM user WHERE id = ?";
connection.query(query, [id], function(err, users) {
connection.release();
if (err) {
throw err;
}
// ...
});
});
Run Code Online (Sandbox Code Playgroud)
如果我需要再次使用该连接怎么办?我不得不release()向下移动几行.但是如果抛出错误会发生什么?连接是否永远不会返回池中?
我是否必须使用一些控制流程库来获得"最终"时刻才能释放它?
有更好的想法吗?
解决这个问题的一种方法是承诺。由于您正在构建一个池,因此您可以使用 q(或本机承诺,即将推出)之类的内容构建您的请求:
// assuming you have your local getConnection above or imported
exports.getConnection = function(queryParams) {
var d = q.defer();
local.getConnection(function(err, conn) {
if(err) d.reject(err);
d.resolve(conn);
});
});
Run Code Online (Sandbox Code Playgroud)
因此,将一些其他调用包装到类似的 Promise 中,然后编写您的查询:
db.getConnection()
.then(function(conn){
makeRequest()
.then(...)
...
.catch(function(err){
// at the end you release the conn
});
Run Code Online (Sandbox Code Playgroud)
这看起来像你所要求的吗?
| 归档时间: |
|
| 查看次数: |
4948 次 |
| 最近记录: |