sql >> Database >  >> RDS >> Mysql

Node Mysql asynchrone meerdere zoekopdrachten

U moet dus wachten tot alle terugbelverzoeken zijn teruggekomen voordat u het antwoord verzendt. Als we foutafhandeling negeren en resultaten leegmaken voor de eenvoud, kan dit op dezelfde manier worden gedaan als:

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

Kijk met beloften naar de functie Promise.all die een nieuwe belofte retourneert. Deze belofte is opgelost wanneer alle beloften die eraan zijn doorgegeven in de array zijn opgelost. Met de Q-bibliotheek zou het zoiets moeten zijn als:

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. Omgaan met datum en tijd in plaats van datetime

  2. Het gemakkelijker maken om een ​​PostgreSQL-productiedatabase te beheren

  3. specifieke mysql-update op basis van groeperen op gegevens

  4. Meerdere kleine zoekopdrachten versus een enkele lange zoekopdracht. Welke is efficiënter?