@narem

Как в созданный массив сделать push из query?

Внутри метода query - новые элементы присваиваются, но если вывести массив за пределами - он пустой. Что делать, что бы он тоже заполнился?
const express = require('express'),
	app = express(),
	mysql = require('mysql'),
	connection = mysql.createConnection({
		host: 'localhost',
		user: 'root',
		password: '',
		database: 'pcnumber'
	}),
	port = 3000,
	path = require('path'),
	bodyParser = require('body-parser');
let searchbd = '',
	admins = [];

app.set('views', path.join(__dirname, '/pages'));
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({extended: true}));

connection.connect((err) => {
	if(err){
		return console.log('Ошибка соединения с базой');
	}
	
	console.log('Подключение к базе успешно');
});

connection.query('SELECT name FROM admin',(error, result, fields) => {
	for(var i = 0; i < result.length; i++){
		admins.push(result[i].name);
		console.log(admins);
	}
	console.log(admins);
});


app.get('/pcnumber',(request, response) => {
	response.render('pcnumber');
});

connection.end();

app.listen(port,(err) => {
	if(err){
		return console.log('Ошибка при запуске сервера');
	}
	
	console.log(`Сервер запущен, порт ${port}`);
});
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
Он не пустой, он заполнился.

Но заполнился он только во время выполнения query, а если ты выведешь его содержимое ДО ЭТОГО, то да, он изначально был пустой.

Что делать - научиться писать асинхронно.
Ответ написан
coderisimo
@coderisimo Куратор тега JavaScript
Если вы пытаетесь обратиться к admins до момента завершения connection.query , вы получаете пустой массив, потому что в момент обращения к admins - admins еще пустой.

как выполняется ваш код :

выводится console.log(1);
начинается выполнение connection.query..... (оно асинхронно)
выводится console.log(2); connection.query. еще не завершился....
выводится console.log(admins); он пуст ибо, connection.query. еще не завершился....
выводится console.log(3); connection.query. еще не завершился....
выводится "query is finished!" - выполнение connection.query завершено
console.log(admins) - вернет полученные данные - выполнение connection.query завершено и admins наполнен данными

console.log(1);
connection.query('SELECT name FROM admin',(error, result, fields) => {
  for(var i = 0; i < result.length; i++){
    admins.push(result[i].name);
  
  }
  console.log('query is finished!');
  console.log(admins); // здесь данные доступны
});
console.log(2);
console.log(admins); // здесь данные еще НЕ доступны
console.log(3);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
30 нояб. 2024, в 22:41
500 руб./за проект
30 нояб. 2024, в 20:49
2000 руб./за проект
30 нояб. 2024, в 20:18
5000 руб./за проект