проблема с назначением объекта пользовательского модуля - PullRequest
0 голосов
/ 05 мая 2019

Создан пользовательский модуль, который получает данные из mysql и работает нормально.но когда я присваиваю данные результата какой-то переменной объекта, она становится пустойВот мой полный код кода:

var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "test",
});

con.connect(function(err) {
if (err) throw err;
 console.log("local module connected !");
});    

module.exports = {       
    apple: () =>  {
      console.log("---------------------------------");
      var cars= {};
      con.query("SELECT * FROM test", function (err, result, fields) {
        if (err) throw err;

        console.log( "Inside con.query : Type is : " + typeof result );  
        cars = result;            
      });

      // return resultsdata;
      console.log( "Type is : " + typeof cars );
      console.dir(  cars );
      console.log("---------------------------------");
    }
};

после

cars = result;

предполагается отображение всего назначенного объекта, но он отображает пустой / ноль.Будем благодарны за любые предложения или помощь!

1 Ответ

0 голосов
/ 05 мая 2019

Поскольку результат выполнения запроса доступен после выполнения функции обратного вызова. И функции обратного вызова имеют асинхронный характер.

Итак, строка var cars= {}; выполняется и присваивает cars как пустой объект. Затем строка con.query... выполняется с функцией обратного вызова, и выполнение продолжается до следующих строк, которые являются вашими console.logs. Поскольку функция обратного вызова, возможно, еще не завершена, cars = result; еще не выполняется.

Если вы можете переместить операторы console.log в функции обратного вызова сразу после оператора cars = result;, вы увидите разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...