首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Node.js和ES6 promise有问题

使用Node.js和ES6 promise有问题
EN

Stack Overflow用户
提问于 2019-07-15 05:08:54
回答 1查看 45关注 0票数 0

这是我的代码片段:

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

代码语言:javascript
复制
    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()之后)时,它就不起作用了!你能帮我弄一下这个吗?

如何获取保存的用户值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 06:01:48

基本上,你在不同的地方同时使用异步和同步功能,这会搞乱一切。基本上,如果你在整个模块中使用一个异步函数,你就不能使用同步函数。但是,在异步函数中,尝试使用基于promise的语法或async-await,假设您在某些快速路径中使用代码,这里是如何简化代码(注释以便于理解):

代码语言:javascript
复制
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
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57031184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档