不要等待node js中的mysql数据库结果

kjthegm6  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(251)

我尝试使用mysql数据库查询从被调用函数中获取结果,但不等待被调用函数中的结果。下面是我的users.js文件的代码。我在getbankdetail函数中得到了结果,但在users函数中没有得到结果。

var db = require("../db/mysqlconnection");

function users(app){
 app.get("/users",async function(req, res, next){
    let bankDetail = await getBankDetail();
    console.log("bankDetail",bankDetail); //Here I do not got result
    return res.send(bankDetail);
 });
}

async function getBankDetail(){
    db.getConnection(async function(err, connection) {
      if (err) throw err; // not connected!

     await connection.query('SELECT * FROM bank', function (error, results, fields) {
        connection.release();

        if (error) throw error;
        console.log("bank result",results);  //Here I got result
        return results;
      });
    });
}

module.exports = users;

我的问题是为什么不在调用的函数中等待结果?我还使用了异步/等待功能。

t8e9dugd

t8e9dugd1#

function getBankDetail(){
  return new Promise((resolve, reject) => {
    db.getConnection(function(err, connection) {
      if (err) reject(err); // not connected!

      connection.query('SELECT * FROM bank', function (error, results, fields) {
        connection.release();

        if (error) reject(err);
        console.log("bank result",results);  //Here I got result
        resolve(results);
      });
    });
  });
}

然后你可以用 let bankDetail = await getBankDetail(); 如果你想使用等待你的 db.getConnection 以及 connection.query 您将不得不使用mysql2/promises库或自己promisify这些函数
以下是使用数据库驱动程序的预期版本时的实现:

async function getBankDetail(){
     const connection = await db.getConnection();
     const data = await connection.query('SELECT * FROM bank');
     connection.release();

     console.log("bank result", data[0]);  //Here I got result

     return data[0];
}

相关问题