sql >> Database >  >> RDS >> Mysql

Gebruik belofte om MySQL-retourwaarde te verwerken in node.js

Dit wordt een beetje verspreid, vergeef me.

Ten eerste, ervan uitgaande dat deze code de mysql-stuurprogramma-API correct gebruikt, is hier een manier om deze in te pakken om te werken met een native belofte:

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

Dus één ding:je hebt nog steeds callbacks. Callbacks zijn slechts functies die u overhandigt aan iets om op een bepaald moment in de toekomst aan te roepen met argumenten naar keuze. Dus de functieargumenten in xs.map(fn) , de (err, result) functies die worden gezien in het knooppunt en het resultaat van de belofte en foutafhandelaars zijn allemaal callbacks. Dit wordt enigszins verward door mensen die verwijzen naar een specifiek soort terugbellen als "terugbelverzoeken", die van (err, result) gebruikt in node core in wat "continuation-passing style" wordt genoemd, soms "nodebacks" genoemd door mensen die ze niet echt leuk vinden.

Voor nu, in ieder geval (async/wacht komt uiteindelijk), zit je vrijwel vast met terugbellen, ongeacht of je beloften nakomt of niet.

Ik merk ook op dat beloften hier niet meteen nuttig zijn, omdat je nog steeds wordt teruggebeld. Beloften schitteren pas echt als je ze combineert met Promise.all en beloven accumulatoren a la Array.prototype.reduce . Maar ze doen schijnen soms, en ze zijn het leren waard.



  1. Een bedrijfsgegevensmodel voor abonnementen

  2. Hoe een string naar hexadecimaal te converteren in MySQL - HEX()

  3. MAAK Oracle-procedure

  4. Union-query's uit verschillende databases in Laravel Query Builder