Я создаю небольшой инструмент для создания отчетов с помощью Node.js, и перед некоторыми проблемами с Javascript я сталкиваюсь. Я вызываю функцию, и она должна возвращать массив с городами из запроса базы данных. Здесь функция.Js function return undefined
function queryBuilderZone() {
var includedCities = new Array();
q = heredoc(function(){/*
SELECT majlis.MajlisId
FROM majlis
WHERE majlis.ZoneId = -ZONE-
*/});
q = q.replace(/-ZONE-/g, inZone);
connection.query(q, function(err, rows, fields) {
if (err) throw err;
var rowsLentgh = rows.length;
for (var i = 0; i < rowsLentgh; i++) {
includedCities.unshift(rows[i].MajlisId);
};
console.log(includedCities); // <-- output correct: ['...', '....']
});
connection.end();
console.log(includedCities); // <-- output wrong: []
return includedCities;
}
Это мой вызов из основной программы
includedCities = queryBuilderZone();
console.log(includedCities); // <-- output wrong: []
Где проблема и почему эта функция не возвращает элементы массива includedCities
?
И в области connection.query
отображается правильное и ожидаемое значение.
Кстати, я использую модуль mysql
для построения запроса и замены заполнителя в запросе.
Стандартный асинхронный чехол. Ваш «ошибочный» консольный журнал появляется до завершения обратного вызова? И «includeCities» - это переменная, локальная для вашей функции. – npup
Мне кажется, что это проблема обзора. Я не человек node.js, но includeCities определен в функции queryBuilderZone, которая не находится в глобальной области. Переместите его над функцией в глобальную область. –
@rontornambe это очень типичная проблема новичка node.js, который не нашел времени, чтобы прочитать небольшой учебник. – hgoebl