Bcrypt 在散列代码后返回 [Object Promise] 或 Promise { <pending> }

问题描述

我正在为 React 应用创建一个帐户注册系统。我在尝试使用 Bcrypt 散列密码时遇到问题。我用来散列密码的函数在这里

async function genPassword(password) {
  let hashpass = bcrypt.hash(String(password),9)
  return hashpass
} 

我稍后在此处进行 sql 调用调用代码

const sql = "INSERT INTO USER (userFName,UserLName,userPhone,IsDelete,userEmail,userPassword) VALUES (?,?,?);" 
      db.query(sql,[fname,lname,phone,email,String(genPassword(password))],(err,data,fields,) => { 
//Code to follow omitted

我把它上传到我的数据库,但在 MysqL 工作台中得到了这个值作为密码:Screenshot

如您所见,我得到的是 [Object Promise] 而不是散列。同样,我得到 Promise { <pending> } 当我 console.log 这个。

谁能看到我在这里做错了什么?当我使用 bcrypt 在一个单独的文件中散列它时,这工作正常,所以我很困惑我在哪里犯了错误

解决方法

也许你可以使用这个:

const generatePassword = async (password) => {
 return await new Promise((res,rej) => {
  // Your hash logic 
  bcrypt.hash(password,10,(err,hash) => {
    if (err) rej(err);
    res(hash);
   });
 });
};

调用时:

 const password = await generatePassword('1234');

hash 方法返回一个 promise,所以 如果您不想更改代码,只需使用 async/awaitthen 来解析承诺值。