Проблема в том, что следующее:
function (error, results, fields) {
console.log("2");
if (error) throw error;
joblist = JSON.stringify(results);
}
является функцией обратного вызова . Вы передаете эту функцию в вызове query()
и говорите ей, чтобы она выполнялась после завершения запроса. Как только ваш код запросил этот запрос (не выполнил его), он сразу же приступает к выполнению следующего кода.
В более ранние дни решением этой проблемы было бы определение всех последующих действий внутри этой функции обратного вызова примерно так:
var express = require('express');
var router = express.Router();
router.post('/', function(req, res, next) {
//console.log("pending data");
console.log("0");
var date = req.param('date');
var joblist;
var vehiclelist;
console.log("1");
res.locals.connection.query('SELECT * FROM job WHERE date = ?',[date] , function (error, results, fields) {
console.log("2");
if (error) throw error;
joblist = JSON.stringify(results);
console.log("3");
res.locals.connection.query('SELECT * FROM vehicle ' , function (error, results, fields) {
console.log("4");
if (error) throw error;
vehiclelist = JSON.stringify(results);
console.log("5");
// etc
res.send('blah')
});
});
});
module.exports = router;
Современный JS теперь имеет обещания и async / await, которые обычно принимаются как более приятные замены для обратных вызовов в асинхронном коде: https://javascript.info/async-await
Быстрый фрагмент согласно последующему комментарию: (Это не полностью рабочий код, просто пример концепций)
var express = require('express');
var router = express.Router();
router.post('/', async function(req, res, next) {
//console.log("pending data");
console.log("0");
var date = req.param('date');
var joblist;
var vehiclelist;
console.log("1");
var promises = [];
promises.push(query1(date));
promises.push(query2());
var results = await Promise.all(promises);
console.log(results[0]); // query1
console.log(results[1]); // query2
res.send('blah');
});
function query1(date) {
return new Promise((resolve, reject) => {
res.locals.connection.query('SELECT * FROM job WHERE date = ?',[date] , function (error, results, fields) {
if (error) {
reject(error);
} else {
resolve(results);
}
}
})
}
function query2() {
return new Promise((resolve, reject) => {
res.locals.connection.query('SELECT * FROM vehicle ' , function (error, results, fields) {
if (error) {
reject(error);
} else {
resolve(results);
}
}
})
}
module.exports = router;