sql >> Database teknologi >  >> RDS >> Mysql

Node Mysql asynkroniserer flere forespørgsler

Så du skal vente på, at alle tilbagekald vender tilbage, før du sender svaret. Hvis vi ignorerer fejlhåndtering og tomme resultater for nemheds skyld kan dette gøres på samme måde som:

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);
        }
     });
   }
});

Med løfter, kig ind i Promise.all-funktionen, som returnerer et nyt løfte. Disse løfter er løst, når alle løfter, der er givet til den i arrayet, er løst. Med Q-biblioteket skulle det være noget i stil med:

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. Kerberos til SQLyog af MariaDB Connector/C

  2. Java Android AsyncTask + mysql-forbindelse

  3. Finde/søge efter manglende værdier i MySQL

  4. Et dybdegående kig på databaseindeksering