Mad*_*iha 0 javascript mysql node.js promise bluebird
我正在尝试在NodeJS中使用MySQL.我的整个应用程序都是用promises构建的,所以我也想宣传这个mysql模块.
所以我有这个:
Promise = require('bluebird');
var mysql = Promise.promisifyAll(require('mysql'));
Run Code Online (Sandbox Code Playgroud)
现在,根据他们的API,该connect()方法接受单个参数,err在连接错误的情况下调用回调.我的问题是,这如何转化为承诺?
承诺会在出错时解决吗?它会被拒绝吗?我.catch()也许需要吗?这是如何运作的?
如果一个方法是一个带有单个参数的节点"errback" - 它将在没有参数的情况下被解析,then或者被err传递给它时被拒绝.在promisification的情况下,您可以捕获它.error或使用catch Promise.OperationalError.
这是一个简单的方法:
function getConnection(){
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret'
});
return connection.connectAsync().return(connection); // <- note the second return
}
getConnection().then(function(db){
return db.queryAsync(....);
}).error(function(){
// could not connect, or query error
});
Run Code Online (Sandbox Code Playgroud)
如果这是用于管理连接 - 我会使用Promise.using- 这是来自API的示例:
var mysql = require("mysql");
// uncomment if necessary
// var Promise = require("bluebird");
// Promise.promisifyAll(mysql);
// Promise.promisifyAll(require("mysql/lib/Connection").prototype);
// Promise.promisifyAll(require("mysql/lib/Pool").prototype);
var pool = mysql.createPool({
connectionLimit: 10,
host: 'example.org',
user: 'bob',
password: 'secret'
});
function getSqlConnection() {
return pool.getConnectionAsync().disposer(function(connection) {
try {
connection.release();
} catch(e) {};
});
}
module.exports = getSqlConnection;
Run Code Online (Sandbox Code Playgroud)
哪个会让你这样做:
Promise.using(getSqlConnection(), function(conn){
// handle connection here, return a promise here, when that promise resolves
// the connection will be automatically returned to the pool.
});
Run Code Online (Sandbox Code Playgroud)