0

嗨,我正在新学习 nodejs 并连接了 mysql 数据库,现在我想将选择查询的结果保存在某种类型的变量中,但我不能。

var campGround = [];


console.log("Select Statement started....");
    con.connect(function(error){

        if(!error){
            console.log("Connected");
            var sql = "select * from campgrounds";
            con.query(sql,function(err,result,field){
                if (!err) {
                    // console.log(JSON.parse(result));
                    for(var i =0;i<result.length;i++)
                    {
                        try {
                            // console.log(result[i]);
                            setCampground(result[i]);
                            // campGround.push(result[i]);
                        } catch (error) {
                            console.log(error.message);
                        }

                    }
                }
                else{
                    console.log("Error while selecting record from campground table. ");
                }
            });
        }else{

            console.log("Error DataBase Not Connected!!! select statement");
        }
    });

    function setCampground(value){
        this.campGround.push(value);
    }


    console.log("length after execution :: "+campGround.length);
    campGround.forEach(function(value){
        console.log("Campground array");
        console.log(value);
    });

当我执行上面的代码并对其进行调试时... select 语句从数据库中返回 3 条记录...但是当我将它们推送到数组中...并打印数组时没有任何反应...请帮助

我找不到任何可以帮助我的东西。

4

2 回答 2

0

您的 mysql 查询调用是异步的(基于回调),并且您对记录的调用campGround在该回调之外,因此这意味着您正在拨打电话但不等待该调用完成。这就是你的 campGround 没有打印任何东西的原因。

您需要在处理错误和响应的回调中移动以下行。像这样的东西

const campGround = [];


console.log("Select Statement started....");
con.connect(function (error) {

  if (!error) {
    console.log("Connected");
    const sql = "select * from campgrounds";
    con.query(sql, function (err, result, field) {
      if (!err) {
        // console.log(JSON.parse(result));
        for (let i = 0; i < result.length; i++) {
          try {
            // console.log(result[i]);
            setCampground(result[i]);
            // campGround.push(result[i]);
          } catch (error) {
            console.log(error.message);
          }

        }
      } else {
        console.log("Error while selecting record from campground table. ");
      }
      console.log(`length after execution :: ${campGround.length}`);
      campGround.forEach(function (value) {
        console.log("Campground array");
        console.log(value);
      });
    });
  } else {

    console.log("Error DataBase Not Connected!!! select statement");
  }
});

function setCampground(value) {
  this.campGround.push(value);
}

于 2020-03-08T19:22:06.263 回答
0

你有:

const campGround = [];

那是全局变量(或模块范围);

然后在代码中你有一个函数

function setCampground(value) {
  this.campGround.push(value);
}

这也在全局范围(或​​模块范围)因此this.campGround不是campGround

更改this.campGround .push(value);campGround .push(value);现在一切正常。

于 2020-03-09T15:53:09.863 回答