刚学async,await有个不懂的地方!


 router.post('/register', async function (req, res) {
   var body = req.body
   try {
     if (await User.findOne({ email: body.email })) {
       return res.status(200).json({
         err_code: 1,
         message: '邮箱已存在'
       })
     }

     if (await User.findOne({ nickname: body.nickname })) {
       return res.status(200).json({
         err_code: 2,
         message: '昵称已存在'
       })
     }

     // 对密码进行 md5 重复加密
     body.password = md5(md5(body.password))

     // 创建用户,执行注册
     await new User(body).save()

     res.status(200).json({
       err_code: 0,
       message: 'OK'
     })
   } catch (err) {
     res.status(500).json({
       err_code: 500,
       message: err.message
     })
   }
 })

网上看到的代码,用到的数据库是mongodb,想问一下if语句中await后面的findone方法不是普通的异步函数吗?那为什么await还会等待其执行完并拿到其返回的值呢?因为我的理解是await后面如果是promise的话,await会等待promise状态改变,但是后面如果是普通的异步函数不是不会等待吗?不知道我理解的对不对_(:з」∠)_

阅读 3.5k
4 个回答

1.await 操作符用于等待一个 Promise对象,如果等待的不是 Promise 对象,则返回该值本身。

2.findOne 返回的是一个 Promise

参考链接:findOneawait

没错 ... async await 只有在处理 Promise 的时候才会等待
setTimout,或者其他异步的函数并不会等待的样子...

没用过mongodb,不过看了下文档,findOne这个函数应该是个同步函数吧,会直接返回一个结果的

正常来说一个普通的同步函数 前面就不用跟await,还是说上面这个User.findOne函数不是我查到的这个?

啥叫 普通的异步函数?还有特殊的?

await 后面就是一个 Promise,你去看 User.findOne() 的定义,看它返回值是不是一个 Promise 不就完了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题