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

ノードMysql非同期複数クエリ

    したがって、応答を送信する前に、すべてのコールバックが戻るのを待つ必要があります。簡単にするためにエラー処理と空の結果を無視する場合、これは次のように実行できます。

    var callback = function(blogs) {
        res.send(blogs);
    }
    
    connection.query("SELECT * FROM blogs ORDER BY time DESC", function(err, blogs, fields) {
        var pending = blogs.length;
    
       for (blog in blogs) {
    
            connection.query("SELECT * FROM tags WHERE blog_id='blog.id' ", function(err, tags, fields) {
            blog.tags = tags;
    
            if (0 === --pending) {
                callback(blogs);
            }
         });
       }
    });
    

    promiseを使用して、新しいpromiseを返すPromise.all関数を調べます。このpromiseは、配列内で渡されたすべてのpromiseが解決されたときに解決されます。 Qライブラリでは、次のようになります。

    var getTags = function(blog) {
        var deferred = Q.defer();
        connection.query("SELECT * FROM tags WHERE blog_id='blog.id' ", function(err, tags, fields) {
            blog.tags = tags;
            deferred.resolve();
        });
        return deferred.promise;
    }
    
    var promises = blogs.map(getTags(blog));
    
    Q.all(promises).then(res.send(blogs));
    


    1. PostgreSQLギャップレスシーケンス

    2. SQL Serverトリガー:理解と代替案

    3. cronとパスワードのセキュリティによって起動されたMysqldump

    4. データベースクエリ:干し草の山から針を見つける方法は?