node.js - 为什么我的异步函数在使用 mysql2 时返回 undefine?
问题描述
我一直在不停地尝试为我的数据表前端处理这个查询。
这是我的 config.js
var config = {
host : 'localhost',
user : 'root',
password : '',
database : 'ef45db'
}
module.exports = config;
这是我想使用异步的函数(等待查询返回表的列名)
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);
}
我正在尝试获取列的名称,以便我可以使用数据表的后端过滤,因为节点是异步的,这个查询正在执行,但值是未定义的(仍然是),我已经阅读了数百篇关于承诺的帖子, bluebird 和 async 方法并试图使其工作,最后我读了很多那是最好的,我选择它是因为代码看起来更干净。任何想法发生了什么?
解决方案
对于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
因为getColumnNames
返回承诺,如
module.exports = {
getInfo: async function (req, res, next) {
var request = req.query;
const aColumns = await getColumnNames();
console.log(aColumns);
}
}
请让我知道这对你有没有用。
推荐阅读
- javascript - .pop 不是函数 - DOM
- flutter - 颤动如何对齐一行/列中的文本
- c# - ASP-PAGE not redirecting. ASP NET CORE MVC 3.1
- c++ - 颜色配置文件转换 - 图像不正确
- c++ - 向量的拆分值
boost program_options 中的选项 - r - Removing elements from a list which contain too many characters in R
- python - Colab 中没有名为“util”的模块
- django - Django Rest Framework + React JWT 身份验证,403 Forbidden on protected views
- c++ - glTexSubImage2D 将二进制数组上传到 Compute Shader 时生成 GL_INVALID_ENUM
- mysql - 如何将null存储到mysql日期列中