javascript - How will a promisified mysql module work with NodeJS? - Stack Overflow

I'm trying to work with MySQL in NodeJS. My entire app is built with promises, so I want to promis

I'm trying to work with MySQL in NodeJS. My entire app is built with promises, so I want to promisify the mysql module as well.

So I have this:

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

Now, according to their API, the connect() method accepts a single parameter, an err callback to be called in case of connection error. My question is, how does that translate to promises?

Will the promise be resolved on error? Will it be rejected? Will I need to .catch() it perhaps? How does that work?

I'm trying to work with MySQL in NodeJS. My entire app is built with promises, so I want to promisify the mysql module as well.

So I have this:

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

Now, according to their API, the connect() method accepts a single parameter, an err callback to be called in case of connection error. My question is, how does that translate to promises?

Will the promise be resolved on error? Will it be rejected? Will I need to .catch() it perhaps? How does that work?

Share Improve this question edited Dec 25, 2014 at 11:34 Benjamin Gruenbaum 277k89 gold badges519 silver badges514 bronze badges asked Jul 17, 2014 at 7:25 Madara's GhostMadara's Ghost 175k50 gold badges272 silver badges314 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 8

If a method is a node "errback" with a single argument - it will be resolved with no parameters in the then or alternatively be rejected with the err passed to it. In the case of promisification, you can catch it with .error or use a catch with Promise.OperationalError.

Here is a simple approach:

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
});

If this is for managing connections - I'd use Promise.using - here is a sample from the API:

var mysql = require("mysql");
// unment 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',
    user: 'bob',
    password: 'secret'
});

function getSqlConnection() {
    return pool.getConnectionAsync().disposer(function(connection) {
        try {
            connection.release();
        } catch(e) {};
    });
}

module.exports = getSqlConnection;

Which would let you do:

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.
});

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1742253057a4409514.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信