首页 > 解决方案 > 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

标签: javascriptmysqlnode.jsasync-await

解决方案


当您使用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];
};

推荐阅读