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

Truy vấn lồng nhau trong nút js bằng cách sử dụng mysql

Tôi thấy hai vấn đề trong mã của bạn:

  • Bạn đang gọi connection.end() đồng bộ, nhưng các truy vấn của bạn chạy trong luồng không đồng bộ. Bạn phải gọi connection.end() chỉ khi bạn hoàn thành truy vấn thứ hai.
  • Bạn đang sử dụng for vòng lặp để chạy các cuộc gọi không đồng bộ (vòng lặp ngoại lai của bạn).

Để hoàn thành những gì bạn đang cố gắng làm, bạn phải xem xét các tình huống không đồng bộ đó. Bạn có thể sử dụng promises hoặc một mô-đun như async , cung cấp cho bạn nhiều phương pháp để đối phó với các luồng không đồng bộ, như async.each() :

connection.query(queryString, function(err, rows, fields) {
    if (err) throw err;

    async.each(rows, function (row, callback) {
        console.log('Product Name: ', row.product_name);
        var emp_query = 'SELECT * FROM tbl_employer';
        connection.query(queryString, function(emp_err, emp_rows, emp_fields) {
            if (emp_err) callback(emp_err);
            for (var e in emp_rows) {
                console.log('Employer Name: ', emp_rows[e].company_name);
            }
            callback();
        }); 
    });
    }, function (err) {
        connection.end();
    }
});

Bây giờ nó sẽ đảm bảo rằng connection.end() sẽ chỉ được gọi khi tất cả các truy vấn của bạn đã hoàn tất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi Varchar sang số để sắp xếp

  2. MySQL:Sắp xếp theo trường, đặt các ô trống ở cuối

  3. Làm cách nào để thực hiện logic boolean trên hai cột trong MySQL?

  4. So sánh thời gian chuyển đổi dự phòng proxy cơ sở dữ liệu - ProxySQL, MaxScale và HAProxy

  5. CHÈN VÀO ... CHỌN cho tất cả các cột MySQL