Widzę dwa problemy w twoim kodzie:
- Wzywasz
connection.end()synchronicznie, ale zapytania działają w przepływie asynchronicznym. Musisz wywołaćconnection.end()dopiero po zakończeniu drugiego zapytania. - Używasz zwykłego
forpętla do wykonywania połączeń asynchronicznych (zewnętrzna pętla).
Aby osiągnąć to, co próbujesz zrobić, musisz wziąć pod uwagę te asynchroniczne scenariusze. Możesz użyć promises
lub moduł taki jak async
, który zapewnia wiele metod radzenia sobie z przepływami asynchronicznymi, takimi jak 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();
}
});
Teraz zagwarantuje, że connection.end() zostanie wywołany po zakończeniu wszystkich zapytań.