Вы отправляете ответ до того, как ваши запросы к базе данных завершатся.
Вы можете использовать обещания для обработки этого:
const s1 = 'small sql statement'
const s2 = 'small sql statement'
const s3 = 'small sql statement'
const statements = [s1, s2, s3]
router.get('/stats', (req, res, next) => {
// Generate array of promises
const promises = statements.map(statement => {
return new Promise((resolve, reject) => {
con.query(statement, (err, results) => {
if (err) reject(err);
resolve(results);
});
});
});
// Wait for all promises to resolve
Promise.all(promises)
.then(results => {
// Merge results into single object
const responseObject = results
.flat()
.reduce((acc, cur) => Object.assign(acc, cur), {});
res.send({ success: responseObject });
})
.catch(err => {
res.send({ error: err });
console.error(err);
});
});
module.exports = router;
Если ваша версия Node не поддерживает .flat()
тогда вы можете изменить это:
const responseObject = [].concat.apply([], results)
.reduce((acc, cur) => Object.assign(acc, cur), {});