首页 > 解决方案 > 不要等待mysql数据库导致节点js

问题描述

我尝试使用 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;

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

标签: mysqlnode.jsexpress

解决方案


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();

如果你想在你的上使用 await ,db.getConnectionconnection.query将不得不使用mysql2/promises库或自己承诺这些功能

这是您使用数据库驱动程序的承诺版本时的实现:

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];
}

推荐阅读