मुझे आपके कोड में दो समस्याएं दिखाई दे रही हैं:
- आप कॉल कर रहे हैं
connection.end()
समकालिक रूप से, लेकिन आपके प्रश्न एसिंक्रोनस प्रवाह में चलते हैं। आपकोconnection.end()
पर कॉल करना होगा केवल तभी जब आपने दूसरी क्वेरी पूरी कर ली हो। - आप एक नियमित
for
. का उपयोग कर रहे हैं एसिंक्रोनस कॉल चलाने के लिए लूप (आप लूप से बाहर हैं)।
आप जो करने की कोशिश कर रहे हैं उसे पूरा करने के लिए, आपको उन असीमित परिदृश्यों पर विचार करना होगा। आप promises
का उपयोग कर सकते हैं
या मॉड्यूल जैसे async
, जो आपको अतुल्यकालिक प्रवाह से निपटने के लिए कई तरीके प्रदान करता है, जैसे 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();
}
});
अब यह गारंटी देगा कि connection.end()
आपके सभी प्रश्नों के समाप्त होने पर ही कॉल किया जाएगा।