Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Use a promessa para processar o valor de retorno do MySQL em node.js


Isso vai ser um pouco disperso, me perdoe.

Primeiro, supondo que este código use a API do driver mysql corretamente, aqui está uma maneira de envolvê-lo para trabalhar com uma promessa nativa:
function getLastRecord(name)
{
    return new Promise(function(resolve, reject) {
        // The Promise constructor should catch any errors thrown on
        // this tick. Alternately, try/catch and reject(err) on catch.
        var connection = getMySQL_connection();

        var query_str =
        "SELECT name, " +
        "FROM records " +   
        "WHERE (name = ?) " +
        "LIMIT 1 ";

        var query_var = [name];

        connection.query(query_str, query_var, function (err, rows, fields) {
            // Call reject on error states,
            // call resolve with results
            if (err) {
                return reject(err);
            }
            resolve(rows);
        });
    });
}

getLastRecord('name_record').then(function(rows) {
    // now you have your rows, you can see if there are <20 of them
}).catch((err) => setImmediate(() => { throw err; })); // Throw async to escape the promise chain

Então, uma coisa:você ainda tem retornos de chamada. Callbacks são apenas funções que você entrega a algo para chamar em algum momento no futuro com argumentos de sua escolha. Portanto, os argumentos da função em xs.map(fn) , o (err, result) funções vistas no nó e os manipuladores de resultado e erro da promessa são todos retornos de chamada. Isso é um pouco confuso por pessoas que se referem a um tipo específico de retorno de chamada como "retornos de chamada", os de (err, result) usado no núcleo do nó no que é chamado de "estilo de passagem de continuação", às vezes chamado de "nodebacks" por pessoas que realmente não gostam deles.

Por enquanto, pelo menos (async/await está chegando eventualmente), você está praticamente preso a callbacks, independentemente de adotar promessas ou não.

Além disso, observarei que as promessas não são imediatamente úteis aqui, obviamente, pois você ainda tem um retorno de chamada. As promessas só realmente brilham quando você as combina com Promise.all e promete acumuladores à la Array.prototype.reduce . Mas eles fazem brilham às vezes, e eles são vale a pena aprender.