Mysql
 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.all, която връща ново обещание. Тези обещания се разрешават, когато всички обещания, предадени към него в масива, са разрешени. С библиотеката 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изградим двигател за „свързани въпроси“?

  2. Прост ранг за актуализиране на MySQL с връзки

  3. Най-добрият начин за изграждане на SMART mySQL &PHP търсачка?

  4. емулирани подготвени изявления срещу реални подготвени изявления

  5. типове данни на схемата sails-mysql