带有mysql查询的异步函数不会返回查询结果node.js

时间:2019-07-10 18:06:52

标签: mysql node.js asynchronous discord.js

我有一个函数,可以使用选择查询来查询mysql数据库。这些都在异步函数中。该查询不断在返回行中告诉我找不到变量“ rollStatus”。

async function PullRollStatus(){
     return new Promise((resolve,reject)=>{

     var sql = `SELECT * FROM brawlid${brawlID}`
     con.query(sql, (error, rows, fields) => { 

     var rollStatus= []
     for (var i in rows) {
     rollStatus.push(rows[i].Bakuganrolled)
         }

     })
     console.log(rollStatus)
     return rollStatus
     })
 }

     var rolledcheck = await PullRollStatus();
     console.log(rolledcheck)

我以前从未使用过新的Promise,因为异步功能对我来说仍然是新的。我已经尝试过不使用“返回新的承诺”行,并且都给出相同的结果。我已经参考了 async and await on MySQL call in node js,但我仍然遇到一些问题,否则可能会使我更加困惑,我不知道。任何帮助是极大的赞赏。预先感谢!

1 个答案:

答案 0 :(得分:1)

我必须对数据库和brawlID的值有更多的了解,但是您不使用带有promise的return,而是使用resolve和reject,而且,您正在返回promise,您不使用异步这是一个经过编辑的示例。注意,我使用mysql.format将变量传递到查询中,这可以防止代码注入。

此外,我认为您将使用where语句,除非每个brawlID都有一个表,但是如果brawlID是表中的一列,这将是有意义的。我将函数更改为采用brawID传递参数的值,而不是引用全局变量。

const mysql = require("mysql2/promise");

const mysqlconfig = {
  host: "localhost",
  user: "youruser",
  password: "yourpassword"
  database: "yourdb"
  multipleStatements: true
};

const con = mysql.createConnection(msqlconfig);

function to (promise) {
    return promise
        .then(val => [null, val])
        .catch(err => [err]);
}

function PullRollStatus(brawlID){
     return new Promise((resolve,reject)=>{

       let sql = `SELECT * FROM brawlid WHERE brawlID=?`;
       mysql.format(sql,brawlID);
       con.query(sql, (error, rows, fields) => { 
         if (error) {
           reject(error);
         } else {
           let rollStatus = [];
           for (let row of rows) {
             rollStatus.push(row.Bakuganrolled)
           }
           console.log(rollStatus);
           resolve(rollStatus);
         }
       });
     });
 }

let brawlIDtoCheck = 1;

let [err,rolledcheck] = await to(PullRollStatus(brawlIDtoCheck));
if (err) {
  console.log("encountered err",err);
}
console.log(rolledcheck)