【问题标题】:Map inside Mongo query returns empty variable outside the function, but not insideMongo查询内部的映射在函数外部返回空变量,但不在内部
【发布时间】:2020-08-31 15:42:07
【问题描述】:

我正在尝试使用此 map 函数与 Mongo 和 node/express JS 构建对象数组。出于某种原因,当我在 map 函数外部执行 console.log 时,数组返回空,但在 map 函数内部,它显示每次迭代都在构建数组。

为什么会出现这种情况?

let allReviews = []

user.reviews.map( async (rev, index) => {
    const reviewer = await User.findOne({_id: rev.reviewerId},{password: 0})
        allReviews.push({
            avatar: reviewer.avatar,
            firstName: reviewer.firstName,
            lastName: reviewer.lastName,
            rating: rev.score,
            review: rev.review
        })
        // console.log(allReviews)
})
console.log(allReviews)

【问题讨论】:

标签: javascript node.js mongodb express


【解决方案1】:

由于 javascript 的异步特性,您需要等待每个数据库调用返回,然后才能使用结果。

在这种情况下,map 将返回一个 Promise 数组(因为回调是一个 async 函数),您需要先解决这些问题才能访问您的 console.log 中的数据。

你可以通过Promise.all来实现这一点:

let allReviews = []

await Promise.all(user.reviews.map( async (rev, index) => {
    const reviewer = await User.findOne({_id: rev.reviewerId},{password: 0})
        allReviews.push({
            avatar: reviewer.avatar,
            firstName: reviewer.firstName,
            lastName: reviewer.lastName,
            rating: rev.score,
            review: rev.review
        })
}));
console.log(allReviews)

【讨论】:

  • 非常感谢!这行得通。我有一些关于 Promises 的阅读准备工作。
  • 很高兴它成功了!如果你能接受我的回答那就太好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-12-20
  • 2019-10-05
相关资源
最近更新 更多