Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Node Mysql không đồng bộ nhiều truy vấn

Vì vậy, bạn phải đợi tất cả các cuộc gọi lại trả về trước khi bạn gửi phản hồi. Nếu chúng tôi bỏ qua việc xử lý lỗi và kết quả trống để đơn giản, điều này có thể được thực hiện tương tự như:

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

Với các lời hứa, hãy xem hàm Promise.all trả về một lời hứa mới. Lời hứa này được giải quyết khi tất cả các lời hứa được chuyển cho nó trong mảng được giải quyết. Với thư viện Q, nó sẽ giống như sau:

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. Ngoại lệ 'không thể tìm thấy trình điều khiển' khi di chuyển trong yii2

  2. PHP PDO truy vấn nhiều lựa chọn liên tục loại bỏ bộ hàng cuối cùng

  3. Cách nhận nhiều số lượng với một truy vấn trong MySQL

  4. SQL Server tương đương ELT () trong MySQL là gì?

  5. Có thể gọi một thủ tục được lưu trữ MySQL từ Ruby không?