Вы добавили нулевые обратные вызовы из ваших вызовов .query.Это ваша проблема.
mysqlConnection.query(query,[],function(err, result){});
xxxxxxxxxxxxxxxxxxxxxxxx
Javascript продолжает выполнение следующего оператора после показанного немедленно, не дожидаясь завершения запроса .Вы знаете, что запрос завершен (или произошла ошибка) только тогда, когда метод .query вызывает вашу функцию обратного вызова.
Итак, вместо этого вам нужно сделать что-то подобное.
mysqlConnection.query(query,[],function(err, result){
if (err) throw Error(err);
//many queries will follow
if(somethingelse){
...
}
});
Последовательность запросов, которые вам нужны, заканчивается абсурдно глубоко вложенным набором функций обратного вызова.Но не отчаивайтесь: шаблон Promise в Javascript обойдется вам и даст вам чистый код.Используйте пакет обещаний-mysql npm .И напишите код, подобный этому.
mysqlConnection.query(query,[])
.then (function(mySqlConnection) {
if (somethingelse)
return mysqlConnection.query(query2,[])
else
return mysqlConnection.query(query3,[])
})
.then (function(mySqlConnection) {
return mysqlConnection.query(query4,[])
})
.then (function(mySqlConnection) {
response.writeHead(200, { "Content-Type": "text/plain" });
response.end("Got it.");
})
.catch (function(err)) {
/* failure somewhere ! */
});
У вас есть ряд функций затем с заглушкой в конце.Подсистема Promise скрывает все вызовы обратного вызова для вас, упорядочивая их таким образом.(Обратите внимание, что я не отлаживал этот пример кода.)
Вы должны выяснить это Обещание вещи для успешного программирования sql / nodejs.Сначала это нелогично (по крайней мере, это было для меня, когда я изучал это).Но это стоит ваших усилий.Совет профессионала: если вы проходите через этот вид кода в отладчике, используйте Step Into свободно.