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ọiconnection.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.