@DanKud

Как вывести полученные из MySQL данные за пределы функции?

Полученные данные из MySQL отлично отображаются внутри самой функции .query но как сделать чтобы они отображались за пределами функции?

var mysql = require("mysql");

var connection = mysql.createConnection({
 database: "default_base",
 host: "localhost",
 user: "root",
 password: ""
});

var result = null;

connection.connect();

connection.query("SELECT * FROM default_table", function(err, rows) {
 if(err) return console.log(err);
 result = rows;
 console.log(result); // внутри функции естественно все отлично выводится
});

console.log(result); // выдаст null
  • Вопрос задан
  • 255 просмотров
Пригласить эксперта
Ответы на вопрос 3
@BorisKorobkov Куратор тега MySQL
Web developer
Вариант 1.
Использовать callback-функцию

Вариант 2 (рекомендую).
Promise
https://github.com/kriskowal/q
Ответ написан
melodyn
@melodyn
Лучше нативная смерть, чем фреймворковая жизнь.
Я, может быть, опишу неправильно принцип работы, но визуализировать себе его можно так: Код выполняется слоями. Сначала идёт просмотр и выполнение первого слоя (в том числе инициализация функций и глобальных переменных), затем второй слой, это как раз callback-функция, которая находится в query. Соответственно, переменной result присваивается значение только на втором проходе, поэтому получаешь null.

Следовательно, всё, что находится внутри callback, там же и обрабатывается. Есть альтернатива в виде промис, но тут уж вопрос в поставленных задачах и полученных навыках.
Ответ написан
Комментировать
@de1m
Как вам уже выше сказали connection.query() и есть уже callback функция, её надо просто вызывать в нужном месте.
Чтобы функция выполнялась "как-будто" последовательно, то надо использовать либо promise либо async/await(более новый метод, чем promise)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы