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
for
pę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ń.