在 Sequelize 中创建用户结果后调用新函数

Call a new function after result of user creation in Sequelize

我有这个代码:

const saltRounds = 10;

let charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

module.exports.addUser = async (req, res) => {
  try {
    let userData = req.body;
    let email = userData.email;


    for (i = 0; i <= 15; i++) {
      let randomNumber = Math.floor(Math.random() * charset.length);
      password += charset.substring(randomNumber, randomNumber + 1);
    }

    bcrypt.hash(password, saltRounds, function (err, hash) {
      password = hash;

      userData.password = password;

    });

} catch (err) {
    console.log(err);
    res.status(500).json("Server error");
  }
};
 

我从前端获取数据,然后生成一个随机密码,并将其添加到 userData 变量中。

我现在想要的是调用该函数在数据库中创建一个用户:

const newUser = await User.createUser(userData, res);

并且能够请求我刚刚从数据库创建的用户在创建后立即使用它制作其他东西:

const user = await User.getUser(email);

我尝试过不同的东西,但每次我都对执行顺序有问题。 例如,该程序会在创建之前尝试获取用户信息等...

我不知道你为什么要再次获取详细信息,如果它们在你创建用户时已经可用。

const newUser = await User.createUser(userData, res);
// newUser has all the values you're trying to fetch

如果未指定调用,bcrypt 哈希将重新运行承诺

module.exports.addUser = async (req, res) => {
  try {
    let userData = req.body;
    let email = userData.email;


    for (i = 0; i <= 15; i++) {
      let randomNumber = Math.floor(Math.random() * charset.length);
      password += charset.substring(randomNumber, randomNumber + 1);
    }

     const hash = await bcrypt.hash(password, saltRounds)
      if(hash) {
      password = hash;
      userData.password = password;
     }
      //then the create user promise code

} catch (err) {
    console.log(err);
    res.status(500).json("Server error");
  }
};
 

这不是 promise 的工作方式。按顺序处理承诺 你可以这样做

let newUserData = null
Promise.all([ User.createUser(userData, res), User.getUser(email);])
        .then((result) =>  newUserData = result[0]);
         // the result will be an array the 1st element will be the response of User.createUser(userData, res) and respective other 

如果有帮助请告诉我!