usersList是具有字符串值的有效数组, User.findById(userId)返回预期的用户。 我认为问题出在范围之内,因为forEach方法和FindById方法可以完美工作。
我尝试了很多返回每个值的数组方法。 (例如,地图和过滤器) 我已经阅读了许多有关高级MongoDB技术,范围和数组方法的文档。
const usersList = camp.usersList;
let users = [];
usersList.forEach((userId) => {
User.findById(userId, (err, user) => {
if(err) return res.redirect('/admin/db');
users.push(user);
})
})
console.log(users);
输出应为[user1,user2,...],而不是[]。
答案 0 :(得分:2)
async () => {
const usersList = camp.usersList;
const users = [];
for (var userId of usersList) {
const user = await User.findById(userId).exec();
if (!user) return res.redirect('/admin/db');
users.push(user);
}
console.log(users);
}
为了获得更好的性能,您可以使用下面的代码,它不会等待单个请求完成,而是会进行并行调用,从而提高性能
async ()=> {
try {
const users_promise = usersList.map(userid => User.findById(userid).exec())
const users = await Promise.all(users_promise);
} catch(error) {
res.redirect('/admin/db');
}
}
答案 1 :(得分:-1)
使用诺言数组
const userPromises = usersList.map(userid => User.findById(userid))
Promise.all(userPromises).then(users => console.log(users))
.catch(() => res.redirect('/admin/db'));