代码之家  ›  专栏  ›  技术社区  ›  Hex

为什么我的异步函数在使用mysql2时返回undefine?

  •  2
  • Hex  · 技术社区  · 6 年前

    我一直在尝试不间断地为我的数据表前端处理这个查询。

    这是我的配置JS

    var config = {
    
    host : 'localhost',
    user : 'root',
    password : '',
    database : 'ef45db'
     }
    
    module.exports = config;
    

    这是我要使用Async的函数(等待查询返回表的列名称)

    async function getColumnNames()
                {
    
            try{
    
                 aColumns = [];
                await connection.query('SHOW COLUMNS FROM '+sTable,
                     function selectCb(err, results, fields){
    
                        console.log("entro a getColumnNames");
    
                      if(err){
                        console.log(err);
                      }
                      for(var i in results)
                      {
                        aColumns.push(results[i]['Field']);
                      }
    
                      connection.end();
                    });
    
    
                    }catch (e){
                        console.log(e);
                    }
                }
    

    这是执行该函数的控制器代码:

    var mysql = require('mysql2');
    
    var config = require('.././database/config');
    var connection = mysql.createConnection(config);
    var sIndexColumn = '*';
    var sTable = 'users';
    var aColumns = [];
    
     module.exports = {
    
        getInfo : async function(req,res,next)
                {
                    var request = req.query;
    
                    (async () => await  getColumnNames());
    
                    console.log(aColumns);
    
                }
    

    我正在尝试获取列的名称,这样我就可以使用DataTable对后端的筛选,因为节点是异步的,所以这个查询正在执行,但是值是未定义的(而且仍然是),我已经阅读了数百篇关于Promises、Bluebird和Async方法的文章,并尝试使其生效,最后一篇我读了很多这是最好的,我选择它是因为代码看起来更干净。有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   deerawan    6 年前

    getColumnNames() await connection.query

    getColumnNames

    function getColumnNames() {
      const aColumns = [];
    
      return new Promise((resolve, reject) => {
        connection.query('SHOW COLUMNS FROM ' + sTable,
          function selectCb(err, results, fields) {
    
            console.log("entro a getColumnNames");
    
            if (err) {
              console.log(err);
              reject(err); // if error happens, reject
            }
    
            for (var i in results) {
              aColumns.push(results[i]['Field']);
            }
    
            connection.end();
    
            resolve(aColumns); // resolve with our database columns
          });
      });
    }
    

    async await

    module.exports = {
      getInfo: async function (req, res, next) {
        var request = req.query;
    
        const aColumns = await getColumnNames();
    
        console.log(aColumns);
    
      }
    }