Javascript 为什么即使我在空数组中推送值,它仍然是空的?

Javascript 为什么即使我在空数组中推送值,它仍然是空的?,javascript,arrays,node.js,loops,mongoose,Javascript,Arrays,Node.js,Loops,Mongoose,usersList是具有字符串值的有效数组, User.findByIduserId按预期返回用户。 我认为问题在于范围块,因为forEach方法和FindById方法工作得很完美 我尝试了许多返回每个值的数组方法。e、 g.映射和过滤器 我已经阅读了很多关于高级MongoDB技术、作用域块和数组方法的文档 const usersList = camp.usersList; let users = []; usersList.forEach((userId) => { User.fin

usersList是具有字符串值的有效数组, User.findByIduserId按预期返回用户。 我认为问题在于范围块,因为forEach方法和FindById方法工作得很完美

我尝试了许多返回每个值的数组方法。e、 g.映射和过滤器 我已经阅读了很多关于高级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,…],而不是[]

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');
    }
}

改用承诺数组

const userPromises = usersList.map(userid => User.findById(userid))

Promise.all(userPromises).then(users => console.log(users))
                         .catch(() => res.redirect('/admin/db'));

在将用户推送到用户数组之前,请在控制台上打印该值。日志“user is”+user;。问题可能是推送从未被调用。若数据库中并没有用户。其次,您打印用户数据库查询的时间没有完成async.User.findById看起来像一个异步函数User.findById asynchronous?forEach忽略异步功能;除了在函数中不使用async/await外,在函数调用users.pushuser之前,您还可以先点击console.logusers。谢谢您的回答,async/await为我解决了这个问题!应该注意,Nayan将循环从.forEach更改为.forEach的原因是.forEach不支持异步。forEach使用回调,因此我们不应该在那里使用wait。所以当我们需要等待回应的时候。你不应该使用forEach。据我所知,猫鼬的回报是一个,而不是一个承诺。你需要打电话给我相信。@Khauri你是对的,但结果仍然是可以的,因此可以与wait一起使用。User.findByIduserId.then基本上是User.findByIduserId.exec.then.Javascript的快捷方式