0

Node JS: Есть необходимость получить JSON из DB MySQL в переменную, в console.log(grantRes) есть результат, а переменная res == undefined (нет JSON ). Понимаю что ассинхроность, может callback не так написал. Просьба помочь: Код:

const mysql = require('mysql');

const con = mysql.createConnection({ host:'localhost', user: 'root', password:'root', database:'testCRM', port:'3306' });

var doSQL = function (script, callback) { con.connect (function(err) { if (err) throw err; }); con.query(script, function (err, result) { if (err) throw err; callback(result[0]); con.end(); }); }

var sproc = ( "CALL getUsers ('*');")

var res = doSQL (sproc, async function(res){ var grantRes = await JSON.stringify(res); //console.log('grantRes is: ' + grantRes); return grantRes; });

  • 1
  • @AlexeyTen, не, не дубликат. Он пытался, просто пару скобок не там поставил. – Qwertiy Jan 04 '19 at 10:20
  • @Qwertiy дубликат-дубликат. В res гарантированно никогда не будет результата. – Alexey Ten Jan 04 '19 at 11:10
  • А возможно вывести переменную grantRes за область видимости колбека? – Антон Мурзинов Jan 04 '19 at 11:17
  • @AlexeyTen, обоснуй. Помимо того, что написано в первой части моего ответа. – Qwertiy Jan 04 '19 at 11:32
  • Проще опишу потребность: есть функция doSQL, принимающая аргументом скрипт и колбек. При вызове в консоль результат из БД получаю. Вопрос: как вызвать doSQL, что б получить результат json в переменную? – Антон Мурзинов Jan 04 '19 at 12:34
  • @Qwertiy во-первых, doSQL ничего не возвращает. Во-вторых, запрос в mysql асинхронный и по определению никакого синхронного результата дать не может. Ответ будет в вызове коллбека через какое-то время и точно не в этом «тике» – Alexey Ten Jan 04 '19 at 20:29
  • @AlexeyTen , что должно в теле callback(result[0]) что б получить переменную с JSON из БД? – Антон Мурзинов Jan 04 '19 at 21:29
  • @AlexeyTen, возвращаемое значение из doSQL нигде не используется, на консоль выводится другое. – Qwertiy Jan 04 '19 at 22:50
  • @АнтонМурзинов, я тебе уже ответил, что исправить. – Qwertiy Jan 04 '19 at 22:51
  • @Qwertiy а переменная res == undefined — т.е. автор таки хочет в res видеть результат. Но это невозможно и это дубликат вопроса выше. – Alexey Ten Jan 05 '19 at 08:48
  • @AlexeyTen, тьфу.. Похоже, мы про разные res говорим. Я вот про этот: async function(res){ - тут же тоже аргумент res называется. А тот, который снаружи вообще удалить надо. – Qwertiy Jan 05 '19 at 11:57

1 Answers1

0
if (err) throw err;  });

Здесь функция не должна завершаться. И научись нормально форматировать код.

var grantRes = await JSON.stringify(res);

Какая-то абсолютно бесполезная асинхронность...

Qwertiy
  • 123,725
  • По сути мне нужно что б при вызове doSQL с аргументами: sql скрипт и колбек из другого модуля в переменную res попадал json – Антон Мурзинов Jan 04 '19 at 07:32