【发布时间】:2021-05-05 07:07:19
【问题描述】:
我遇到了范围界定问题。首先,我正在搜索当前用户,一旦找到他或她的对象,我就会访问他们的朋友数组。在该朋友数组中,存储了每个朋友的用户名。然后,我尝试在该好友数组上执行 forEach 循环,并尝试将每个找到的好友对象添加到名为 friendsObjArr 的数组中。当我与一位朋友和最后一个 else 语句中的 res.json 语句对其进行测试时,它可以工作。但是我需要它在循环之外,所以每个朋友都被推了。问题是,循环结束后,数组中的数据也消失了。这是我的代码:
function getFriends(req, res){
const username = req.params.userId
let friendsObjArr = []
User.findOne({username: username}, (err, foundUser) => {
if (err){
console.log(err);
}
else {
foundUser.friends.forEach(friend => {
User.findOne({username: friend}, (err, foundFriend) =>{
if (err){
console.log(err);
}
else{
console.log(foundFriend);
friendsObjArr.push(foundFriend)
}
})
});
res.json(friendsObjArr)
}
})
}
【问题讨论】:
-
数组中的数据没有消失。当它到达
res.json(friendsObjArr)时,它从未真正进入过那里。为什么?仅仅是因为User.findOne在您的forEach中的异步调用中需要这样处理。您将需要利用 Promise 来完成这项工作。你用的是猫鼬还是原生的nodejs驱动?
标签: node.js arrays mongodb scope mongodb-query