sql >> Databáze >  >> RDS >> Mysql

Použijte slib ke zpracování návratové hodnoty MySQL v node.js

Tohle bude trochu rozptýlené, odpusťte mi.

Za prvé, za předpokladu, že tento kód správně používá rozhraní API ovladače mysql, zde je jeden způsob, jak jej zabalit, aby fungoval s nativním příslibem:

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

Takže jedna věc:Stále máte zpětná volání. Zpětná volání jsou pouze funkce, které předáváte něčemu, abyste je mohli někdy v budoucnu zavolat s argumenty podle vlastního výběru. Takže argumenty funkce v xs.map(fn) , (err, result) funkce zobrazené v uzlu a obslužné rutiny pro výsledek a chyby jsou zpětná volání. To je poněkud zmateno tím, že lidé označují konkrétní druh zpětného volání jako „zpětná volání“, tedy (err, result) používá se v jádře uzlů v tom, čemu se říká "styl pokračování-předávání", někdy nazývaný "nodebacks" lidmi, kteří je ve skutečnosti nemají rádi.

V tuto chvíli (asynchronní/čekací funkce se nakonec blíží) jste do značné míry uvízli u zpětných volání, bez ohledu na to, zda přijmete sliby nebo ne.

Také si všimnu, že sliby nejsou okamžitě, což je zjevně užitečné, protože stále máte zpětné volání. Sliby skutečně září pouze tehdy, když je zkombinujete s Promise.all a slibují akumulátory a la Array.prototype.reduce . Ale dělají občas zazáří a jsou stojí za to se naučit.



  1. Výhody PostgreSQL

  2. Autoinkrement oracle se sekvencí a spouštěčem nefunguje správně

  3. Vložte více řádků do jedné tabulky na základě čísla v jiné tabulce

  4. Jak odstranit jedinečný klíč z tabulky mysql