sql >> データベース >  >> RDS >> Mysql

promiseを使用してnode.jsのMySQL戻り値を処理します

    これは少し散らばるでしょう、許してください。

    まず、このコードがmysqlドライバーAPIを正しく使用していると仮定すると、ネイティブのpromiseで動作するようにラップする方法が1つあります。

    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
    

    つまり、まだコールバックがあります。コールバックは、選択した引数を使用して、将来のある時点で呼び出すために何かに渡す関数にすぎません。したがって、xs.map(fn)の関数の引数 、(err, result) ノードに表示される関数とpromiseの結果およびエラーハンドラーはすべてコールバックです。これは、特定の種類のコールバックを「コールバック」、つまり(err, result)のものと呼ぶ人々によって多少混乱しています。 ノードコアで「継続渡しスタイル」と呼ばれるもので使用されます。これは、あまり好きではない人からは「ノードバック」と呼ばれることもあります。

    今のところ、少なくとも(async / awaitは最終的には来る)、promiseを採用するかどうかに関係なく、コールバックにかなり悩まされています。

    また、コールバックがまだあるため、promiseはすぐには役に立たず、明らかにここでは役に立ちません。 Promiseは、Promise.allと組み合わせた場合にのみ本当に輝きます。 Array.prototype.reduceのアキュムレータを約束します 。しかし、彼らは 時々輝きます、そして彼らは 学ぶ価値があります。



    1. インデックス(ゼロベース)はゼロ以上である必要があります

    2. error_logではなくすべてのPHPエラーをデータベースに出力する

    3. MySQLとMariaDBでの偶発的なデータ削除を克服する方法

    4. Mac OS Sierra virtualenv(python 2.7)pipinstallmysqlclientエラー