节点表示自定义模块对象分配问题

时间:2019-05-05 19:33:35

标签: javascript express

创建了自定义模块,该模块正在从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 :(得分:0)

因为在执行回调函数后查询执行的结果可用。回调函数本质上是异步的。

因此,行var cars= {};被执行并将cars分配为空对象。然后,使用回调函数执行con.query...行,并继续执行下一行,即您的console.logs。由于回调函数可能尚未完成,因此cars = result;尚未执行。

如果您可以将console.log语句后的cars = result;语句移到回调函数中,则会看到不同之处。