javascript - 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
})
})
})
}
解决方案
首先,await
只有在等待承诺时才会做一些有用的事情。
其次,在 mongoose 中,model.findOne().exec()
只有在您不将回调传递给.exec()
. 如果您传递回调(正如您所做的那样),它会通过该回调传达完成或错误,并且不会返回任何承诺。因此,您的await
陈述没有做任何事情。
因此.exec()
,await
要从.exec()
.
推荐阅读
- javascript - 在函数中渲染 JSX 元素
- sql - 如何替换 SQL 更新查询中的分隔列值?
- java - Fortify 认为强类型对象上存在日志伪造,除非我手动调用 .toString()
- batch-file - 星号批量扩展
- html - 使用 Bigcommerce 如何在页眉中隐藏某些导航项目但将它们保留在页脚中?
- javascript - 如何识别 CRM 表单中的标题部分?
- python - OCR in the Wild - Image preprocessing
- google-apps-script - 在 Google App Script 中与 YouTube.Search.list 一起使用时出现“统计”属性的问题
- javascript - React JS 上下文 API - 窗口滚动事件
- sql - how to query the result of UNION query