0

NodeJSでMySQLを操作しようとしています。mysql私のアプリ全体は promise で構築されているため、モジュールもpromised したいと考えています。

だから私はこれを持っています:

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

現在、API によると、このconnect()メソッドは単一のパラメーター、つまりerr接続エラーの場合に呼び出されるコールバックを受け入れます。私の質問は、それがどのように約束に変換されるのですか?

promise はエラーで解決されますか? 拒否されますか?.catch()おそらくそれが必要ですか?それはどのように機能しますか?

4

1 に答える 1

8

メソッドが単一の引数を持つノード「errback」である場合、パラメーターなしで解決されるか、代わりに渡されたものthenで拒否されます。err約束の場合は、 でキャッチする.errorか、 でキャッチを使用できます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
});

これが接続を管理するためのものである場合-私は使用します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;

これにより、次のことが可能になります。

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.
});
于 2014-07-17T08:19:23.977 に答える