Javascript 获取MySQL表中满足条件的所有行的数组

Javascript 获取MySQL表中满足条件的所有行的数组,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在使用discord.js机器人,因此我正在使用Node.js。我需要做的是搜索我的MySQL表,获取所有符合条件的行(我可以这样做),然后返回所有符合条件的行的第一列中的值。我尝试了多种不同的方法,但我的主要问题是无法返回该值。我可以在查询中console.log它,但我确实需要返回它 function fetchOrders(status){ textr = con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`

我正在使用discord.js机器人,因此我正在使用Node.js。我需要做的是搜索我的MySQL表,获取所有符合条件的行(我可以这样做),然后返回所有符合条件的行的第一列中的值。我尝试了多种不同的方法,但我的主要问题是无法返回该值。我可以在查询中
console.log
它,但我确实需要返回它

function fetchOrders(status){
    textr = con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`, function(err,rows) {
                if(err){
                    throw err
                }
                var text = "";
                if(rows.length<1){
                    text = "None"
                }else{
                    for(i=0;i<rows.length;i++){
                        text = text + "`" + rows[i].OID.toString() + "`, "
                    }
                }
                if(text===""){
                    text = "None"
                }
                return text;
            })
    return textr    
}
函数获取订单(状态){
textr=con.query(`SELECT*FROM orders其中OStatus='${status}';`,函数(err,行){
如果(错误){
失误
}
var text=“”;

if(rows.length我假设您不熟悉node.calls中的异步调用。接受回调的调用通常是异步执行的,这意味着调用的结果不会立即可用(即使在函数调用结束后也不会),但一旦结果可用,就会调用回调

您可以修改代码以接受另一个回调,这样您的函数就有机会处理查询结果,然后通知调用方:

function fetchOrders(status, callback){
    con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`, function(err,rows) {
        if(err){
            callback(err);
        }
        var text = "";
        if(rows.length<1){
            text = "None"
        }else{
            for(i=0;i<rows.length;i++){
                text = text + "`" + rows[i].OID.toString() + "`, "
            }
        }
        if(text===""){
            text = "None"
        }

        callback(null, text);
    })
}
你需要写:

fetchOrders(status, function (err, result) {
    if (err) {
        throw err;
    }

    // do something with result
})

将此函数转换为如下所示的promise样式

function fetchOrders(status) {
  return Promise((resolve, reject) => {
    con.query(`SELECT * FROM orders WHERE OStatus = '${status}';`, function(
      err,
      rows
    ) {
      if (err) {
        reject(err);
      }
      var text = "";
      if (rows.length < 1) {
        text = "None";
      } else {
        for (i = 0; i < rows.length; i++) {
          text = text + "`" + rows[i].OID.toString() + "`, ";
        }
      }
      if (text === "") {
        text = "None";
      }
      resolve(text);
    });
  });
}
fetchOrders
  .then(result => {
    console.log(result);
  })


非常感谢您的解释-我是否可以在您编写的函数中放入一个
返回结果
,以获取我的值,或者我是否仍在使用其他内容?@JackBarrett,不幸的是,这是不可能的,因为回调函数的返回值从未使用过。如果您希望以更同步的方式编写代码,请使用嗯,我建议你遵循Ashish的方法。非常感谢你。虽然我不太明白这对我来说似乎是有意义的。我将尝试应用这一点。这个链接可能会帮助你-经过一点修补,我终于能够根据你的解决方案使我的代码正常工作。你是一个救生员。非常感谢!(关于承诺等的指南看起来也很有用,所以也谢谢你)
fetchOrders
  .then(result => {
    console.log(result);
  })
const response = await fetchOrders();