Javascript 无法从mysql推送到数组结果

Javascript 无法从mysql推送到数组结果,javascript,mysql,express,Javascript,Mysql,Express,这是我的密码 var nbu = req.body.nbu; var inv=[]; db.query( "SELECT * FROM `invoice_ska` WHERE nm_client =?", nbu, (err, results) => { if (err) throw err; inv.push(results); } ); } console

这是我的密码

  var nbu = req.body.nbu;
  var inv=[];
    db.query(
      "SELECT * FROM `invoice_ska` WHERE nm_client =?",
      nbu,
      (err, results) => {
        if (err) throw err;
        inv.push(results);
      }
    );
  }
  console.log(inv);//this just []
});

我不能控制台.log(myArr)我不知道为什么这是一个异步问题,MDN的完整指南很好地解释了异步javascript

要简单回答您的案例,您需要
console.log
查询回调块中的结果。为什么?因为您需要等待DB查询完成并返回数据,所以这是异步发生的

var nbu = req.body.nbu;
var inv=[];

db.query(
  "SELECT * FROM `invoice_ska` WHERE nm_client =?",
  nbu,
  (err, results) => {
    if (err) throw err;
    inv.push(results);
    console.log(inv);
  }
);
您必须像这样编写代码,使用async wait等待承诺,然后执行您的逻辑


它认为这是因为节点的异步行为,使用承诺而不是回调并等待db返回数据
const someFunc = async (req, res) => {
var nbu = req.body.nbu;
var inv = [];
let results = await db.query(
    "SELECT * FROM `invoice_ska` WHERE nm_client =?", nbu
);
if (results) {
    inv.push(results);
}
console.log(inv);//this just []}