javascript - Node.js 常量不等待异步函数的响应
问题描述
我是async/await的新手,我正在尝试将“用户”常量设置为 Node.js 中 MySQL 查询的返回值。但是,常量不等待函数的返回值。如何使用 async 和 await 将 'user' 设置为 SQL 查询的返回值?
// Should return a user object
const getUserByUsername = async (username, db) => {
const QUERY = `SELECT * FROM ${table_name} WHERE username = '${username}'`;
const user = await db.query(QUERY,
async (err, result) => {
if (!err) {
console.log("name in SQL function: " + result[0].username);
return await result[0];
} else {
console.log(err);
}
}
);
return user;
};
// Does stuff with the user object
const authenticateUser = async (username, password, done) => {
const user = await getUserByUsername(username, db);
console.log("name in main function: " + user.username);
// Trying to do stuff with the user object...
}
我在终端得到什么:
name in main function: undefined
UnhandledPromiseRejectionWarning: Error: data and hash arguments required
at Object.compare
at /app/node_modules/bcrypt/promises.js:29:12
at new Promise (<anonymous>)
at Object.module.exports.promise
etc.....
name in SQL function: john
解决方案
当您使用db.query
回调时,它不会返回承诺
请尝试以下代码
const getUserByUsername = async (username, db) => {
const QUERY = `SELECT * FROM ${table_name} WHERE username = '${username}'`;
const result = await db.query(QUERY);
console.log("name in SQL function: " + result[0].username);
return result[0];
};
推荐阅读
- streaming - TimescaleDB 和 PipelineDB 集成
- c# - 是否可以将带有参数的用户控件放入表单中?
- c# - 我应该使用哪个 DPI?
- swift - 以编程方式创建的 UITextView 的奇怪字体行为
- aws-lambda - 如何修复未处理的拒绝错误:无法在 AWS LAMBDA (NodeJS) 中执行 GraphicsMagick/ImageMagick
- android - 即使我呆在同一个地方,纬度和经度也在变化
- php - MySQL不允许在textarea表单帖子中使用“list”一词
- javascript - 从 Codebehind asp net 中的动态输入文本 HTML 中获取值
- linux - 在虚拟机上运行时如何查看 Dask 仪表板?
- node.js - Jenkinsfile / Docker:指向“npm”私有注册表