Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Node Mysql asynchronizuje wiele zapytań

Musisz więc poczekać na powrót wszystkich wywołań zwrotnych, zanim wyślesz odpowiedź. Jeśli dla uproszczenia zignorujemy obsługę błędów i puste wyniki, można to zrobić podobnie do:

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

W przypadku obietnic zajrzyj do funkcji Promise.all, która zwraca nową obietnicę. Te obietnice są rozwiązane, gdy wszystkie obietnice przekazane do niej w tablicy zostaną rozwiązane. Z biblioteką Q powinno to wyglądać mniej więcej tak:

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. Wykonanie instrukcji MySQL zajmuje więcej niż minutę

  2. Jaki jest najlepszy sposób zarządzania datami w PHP, MySQL itp.?

  3. Przytnij z warunkiem

  4. Co oznacza i robi MYSQLI_NUM?

  5. Zmień stół bez blokowania całego stołu