如何让函数等待变量“rows”包含 mysql 查询的结果?

问题描述

client.MysqLlocal 函数应该返回行。

我当前的代码https://pastebin.com/hgt2DwSY

θ
" Î

附言这是一个代码片段,我在上面定义了一个客户端 :) .

解决方法

在这种情况下,我可能会承诺您的查询功能

 const mysql = require('mysql2');
    
    let pool  = mysql.createPool({
      connectionLimit : 10,host            : 'localhost',user            : 'user',password        : 'passwd',database        : 'database',waitForConnections: true,queueLimit: 0
    });
    
    client.mysqllocal = function localmysql(mySQL_db,mySQL_query) {
      return new Promise((resolve,reject) => {
        let rows;
           pool.getConnection(async function(err,conn) {

            if (err){ 
              reject(err);  
            }

          conn.changeUser({database : mySQL_db},function(err) {
            if (err){ 
              reject(err);
            } 
          });

            conn.query(mySQL_query),function (error,results,fields) {
              rows = results
            }
          conn.release()
        })
        resolve(rows);
      });
    }
    
    client.mysqllocal('database','SELECT * FROM `guild_config` WHERE `guild_id` = "guildid"').then(func => console.log(func));

,
const mysql = require('mysql2');

let pool  = mysql.createPool({ 
   connectionLimit : 10,database        : 'database'
});

client.getLocal = (db,query,callback) => {
    pool.getConnection((err,con) => {
        if(err) reject(err);

        con.changeUser({
            database: db
        },(err) => { if(err) reject(err) });

        con.query(query,(error,result,fields) => {
            return callback(result);
        })
    })
}

client.getLocal('dbname','query',(result) => {
    console.log(result)
})

我在这里做的是指定一个函数inside一个函数,这样我就可以处理查询给我的数据,而且不需要异步! Promises 更受欢迎,但我认为我的回调更灵活,初学者在使用 Promises 时容易混淆,就像我一样!我会说像上面的问题一样使用承诺。