sql >> Base de Datos >  >> RDS >> Mysql

Nodo Mysql asíncrono consultas múltiples

Por lo tanto, debe esperar a que regresen todas las devoluciones de llamada antes de enviar la respuesta. Si ignoramos el manejo de errores y los resultados vacíos por simplicidad, esto se puede hacer de manera similar a:

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

Con promesas, mire la función Promise.all que devuelve una nueva promesa. Esta promesa se resuelve cuando se resuelven todas las promesas que se le pasan en la matriz. Con la biblioteca Q debería ser algo como:

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