首页 > 解决方案 > Return 确实在同一个函数中等待两个等待。Java脚本

问题描述

大家好,我是 nodeJS 和 mongoDb 的新手。所以我对这段代码有一些问题,这似乎对其他人有用,因为它是教程的一部分,但不适合我。问题出在函数“followThisUser”中,我已经验证了返回,不会等到“following”和“followed”变量被赋值。它只是将它们返回为未定义。如果有人可以帮助我理解为什么会发生这种情况,并给我一个解决方案,我会非常满意。

async function followThisUser(indentity_user_id, user_id) {
  var following = await Follow.findOne({
    user: indentity_user_id,
    followed: user_id
  }).exec((err, follow) => {
    if (err) return handleError(err);
    return follow;
  });

  var followed = await Follow.findOne({
    user: user_id,
    followed: indentity_user_id
  }).exec((err, follow) => {
    if (err) return handleError(err);
    return follow;
  })

  return {
    following,
    followed
  }
}

function getUser(req, res) {
  var userId = req.params.id

  User.findById(userId, (err, user) => {
    if (err) return res.status(500).send({
      message: 'Error en la petición'
    })
    if (!user) return res.status(404).send({
      message: 'Error el usuario no existe'
    })

    followThisUser(req.user.sub, userId).then((value) => {
      user.password = undefined;
      return res.status(200).send({
        user,
        value
      })
    })
  })
}

标签: javascriptnode.jsmongoose

解决方案


首先,await只有在等待承诺时才会做一些有用的事情。

其次,在 mongoose 中,model.findOne().exec()只有在您不将回调传递给.exec(). 如果您传递回调(正如您所做的那样),它会通过该回调传达完成或错误,并且不会返回任何承诺。因此,您的await陈述没有做任何事情。

因此.exec()await要从.exec().


推荐阅读