Node.js 和 ES6 promise 有问题

having problem with Node.js and ES6 promise

这是我的一段代码:

我声明了一个变量(newSeller),我希望在这个过程中使用它

    let newSeller = '';
    if (req.body.selectSeller == '') {
        User.findOne({email: req.body.sellerEmail}).then(userEx => {
            if (!userEx) {
                const newUser = new User({
                    firstName: req.body.sellerName,
                    lastName: req.body.sellerLastName,
                    title: req.body.sellerTitle,
                    phoneNumber: req.body.sellerPhNum,
                    email: req.body.sellerEmail,
                    password: req.body.password,
                    address: req.body.sellerAddress
                });
                bcrypt.genSalt(10, (err, salt)=>{
                    bcrypt.hash(newUser.password, salt, (err, hash)=>{
                        newUser.password = hash;

                    });
                });
                newUser.save().then(savedSeller => {
                    newSeller = savedSeller.id;
                });

            } else if (userEx) {
                req.flash('error_message', 'this email already exists. try another one')
                res.redirect('/admin/invoice/incoming');
            }
        });

    } else {
        newSeller = req.body.selectSeller;
    }

这段代码实际上成功地保存了预期的文档,但是当我将变量 (newSeller) 分配给 ES6 promise 的值时(在 then() 之后)它不起作用! 你能帮我解决这个问题吗?

如何获取保存的用户值?

基本上你在不同的地方一起使用异步和同步功能,这把一切都搞砸了。基本上,即使在整个模块中使用一个异步函数,也不能使用同步函数。但是在异步函数中,尝试使用基于承诺的语法或 async-await 假设您在某些快速路线中使用代码,这里是如何简化代码(为了理解而评论):

app.post('/someroute', async (req, res) => { //<<-Async handler
  let newSeller = '';
  if (req.body.selectSeller == '') {
    try { //<<--need to catch `async-await` errors
      const userEx = await User.findOne({ email: req.body.sellerEmail });//<<awaiting the result
      if (!userEx) {
        const newUser = new User({
          firstName: req.body.sellerName,
          lastName: req.body.sellerLastName,
          title: req.body.sellerTitle,
          phoneNumber: req.body.sellerPhNum,
          email: req.body.sellerEmail,
          password: req.body.password,
          address: req.body.sellerAddress
        });
        const salt = await bcrypt.genSalt(10); // await 
        const hash = await bcrypt.hash(newUser.password, salt);// await
        newUser.password = hash;
        const savedSeller = await newUser.save(); //await
        newSeller = savedSeller.id;
      } else {
        req.flash('error_message', 'this email already exists. try another one')
        res.redirect('/admin/invoice/incoming');
      }
    } catch (err) { //<<--if there is an error
      req.flash(...something...)
      res.redirect(...somewhere...);
    }
  } else {
    newSeller = req.body.selectSeller;
  }
  //do something with newSeller
})