我正在学习异步/等待,并尝试使用它修复代码,以便在服务器将数据发送回客户端之前,猫鼬查询不会及时返回。
查询用户名时,代码检查是否存在req.userId来登录用户,对其进行查询并设置_self变量,然后将数据发送回客户端
如何仅在完成对req.userId的猫鼬查询之后才将数据发送回去?
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仅在异步函数中有效”错误
答案 0 :(得分:1)
这是您的代码
app.get('/:username', async function(req, res) {
try{
var user = await User.findOne({ username: req.params.username })
.....
let _self = null;
if (req.userId != null) {
var self = await User.findOne({ _id: req.userId})
_self = self.toObject()
}
}
catch(err){
throw err
}
return res.status(200).send({user: _user, self: _self })
})
异步/等待用于解决承诺。 解析完成后,将返回异步函数的返回值,而不是使用等待来解析承诺。
findOne是aysnc函数,因此应将find与findOne一起使用。 toObject是一个同步函数,因此不需要使用await