【发布时间】:2021-08-09 06:25:10
【问题描述】:
我是 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
【问题讨论】:
-
既然
name in SQL function: john不是name设置?问题似乎源于 Object.compare 中缺少的论点“数据”和“哈希” -
这似乎是一个非常注释的误解。
await只有在等待连接到异步操作的承诺时才会做任何有用的事情。因此,await db.query(..., function()[ ... })中的await什么都不做,因为当您传递回调时,db.query()不会返回承诺。带有承诺或普通回调的代码,而不是混合代码。而且,return await result[0];还说明您需要了解await的实际作用,因为它根本没有做任何事情。
标签: javascript mysql node.js async-await