下面是我遇到问题的代码:
const users = []
event.registeredUsers.forEach(userId => {
User.findOne({ _id: userId }).then(user => {
console.log(user) // logs a valid user
users.push(user)
});
});
console.log(users) // logs empty array
该事件是一个MongoDB文档,它具有registeredUsers字段,该字段是MongoDB对象Id的数组。当控制台记录用户时,在then块中返回,它确实显示有效的用户文档,但当循环完成后res.send(users)时,它在浏览器中显示空数组。
3条答案
按热度按时间wz3gfoph1#
您正在尝试在forEach内执行基于承诺的代码,但该代码无法按预期方式工作。请使用
for..of
或Promise.all
for..of
(顺序)Promise.all
(并联)06odsfpq2#
这是一个事件循环问题。由于User.findOne是一个Promise,因此
.then()
函数将在console.log(users)
之后执行。下面是一个关于JavaScript事件循环的视频:https://www.youtube.com/watch?v=8aGhZQkoFbQ
wsewodh23#
followingId
是一个对象ID数组,在select方法中可以传递所需的字段