【发布时间】:2019-12-17 09:45:16
【问题描述】:
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, ...],而不是 []。
【问题讨论】:
-
在将
user推送到users数组之前,请在控制台 (console.log('User is '+user);) 上打印该值。问题可能是从未调用过推送。如果数据库中没有用户。其次,您打印users数据库查询的时间还没有完成(异步)。 -
User.findById 看起来像一个异步函数
-
User.findById 是异步的吗? forEach 忽略异步功能;除了不对你的函数使用 async/await 之外,你会在你的函数调用
users.push(user)之前点击console.log(users)。 -
感谢您的回答,async/await 为我解决了问题!
标签: javascript arrays node.js loops mongoose