Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie funktioniert ein versprochenes MySQL-Modul mit NodeJS?

Wenn eine Methode ein Knoten "errback" mit einem einzigen Argument ist, wird sie ohne Parameter im then aufgelöst oder alternativ mit err abgewiesen werden dazu übergegangen. Im Falle einer Versprechung können Sie diese mit .error abfangen oder verwenden Sie einen Fang mit Promise.OperationalError .

Hier ist ein einfacher Ansatz:

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

Wenn dies zum Verwalten von Verbindungen dient, würde ich Promise.using verwenden - Hier ist ein Beispiel aus der 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;

Was Sie tun lassen würden:

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