Javascript 快速调用中的异步等待

Javascript 快速调用中的异步等待,javascript,async-await,Javascript,Async Await,我正在学习async/await,并尝试使用它修复代码中的一个bug,在服务器将数据发送回客户端之前,mongoose查询没有及时返回 当查询用户名时,如果存在req.userId,代码将检查用户是否登录,查询它并设置一个_self变量,然后将数据发送回客户端 如何仅在对req.userId进行mongoose查询之后才将数据发送回 app.get('/:username', async function(req, res) { User.findOne({ username: req.

我正在学习async/await,并尝试使用它修复代码中的一个bug,在服务器将数据发送回客户端之前,mongoose查询没有及时返回

当查询用户名时,如果存在req.userId,代码将检查用户是否登录,查询它并设置一个_self变量,然后将数据发送回客户端

如何仅在对req.userId进行mongoose查询之后才将数据发送回

app.get('/:username', async function(req, res) {
    User.findOne({ username: req.params.username })
    .exec(function(err, user) {
        .....
        let _self = null;

        if (req.userId != null) {
            User.findOne({ _id: req.userId}, function(err, self) {
                await _self = self.toObject();
            });
        }

        return res.status(200).send({user: _user, self: _self })
    })
})
我得到一个“SyntaxError:await仅在异步函数中有效”错误

这是您的代码

app.get('/:username',异步函数(req,res){
试一试{
var user=await user.findOne({username:req.params.username})
.....
设_self=null;
if(req.userId!=null){
var self=wait User.findOne({u id:req.userId})
_self=self.toObject()
}
}
捕捉(错误){
失误
}
返回res.status(200).send({user:_user,self:_self})

})
您的
findOne()
回调函数不是异步函数。这并没有帮助,因为您的
status()
调用仍然在调用该回调之前发生。它部分工作,您的意思是self=wait User。。。?而不是等待self=?等待self=User.findOne({u id:req.userId})^^^^^^^^^^^^^^^^^^^引用错误:分配中的左侧无效我已经进行了拼写检查,现在可以告诉我如何使用此新代码了吗?我已经更新了代码。使用try-catch进行错误处理