当前位置: 首页 > 知识库问答 >
问题:

Map inside Mongo查询返回函数外部的空变量,但不返回函数内部的空变量

何甫
2023-03-14

我正在尝试使用Mongo和node/express JS的这个map函数构建一个对象数组。由于某种原因,当我运行控制台时,数组返回空。在map函数外部记录日志,但在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)

共有1个答案

太叔志文
2023-03-14

由于javascript的异步特性,在使用结果之前,需要等待每个数据库调用返回。

在这种情况下,map将返回一个Promises数组(因为回调是一个async函数),在您访问console.log中的数据之前,需要先解析该数组。

你可以通过做promise来实现这一点。全部

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)
 类似资料:
  • 因此,我正在构建一个云函数,它接受customerID,根据customerID过滤文档,并返回文档列表。遗憾的是,它返回一个空数组。我相信这是一个简单的解决办法。 以下是云功能: 下面是我从客户端调用它时的代码。 此外,这里是一个萤火虫的屏幕截图。 firestore的截图

  • 问题内容: 我正在读一本叫做《 Go编程语言》的书,在有关指针的第二章中,写了以下内容 函数返回局部变量的地址是绝对安全的。例如,在下面的代码中,即使调用返回后,由对f的特定调用创建的局部变量v仍将存在,并且指针p仍将引用它: 我完全不明白这一点,应该在执行函数后销毁局部变量。是因为可能v是在堆上分配的。我知道在C语言中,如果您使用malloc分配空间,函数执行后就不会销毁它,因为它在堆上。 问题

  • 从数据库中提取博客。 为什么这里的blogContent在函数的上下文中是全局的,而我们正在内部更改它,所以它应该返回值,有人能解释为什么会这样吗? 有没有不使用promise/async/await的方法>>>有人给了我答案 我如何从异步调用返回响应? 但这一点我不知道,最主要的是我不知道Ajax。

  • 问题内容: 我想知道是否存在一种实现类似于map getter的功能的方法:它返回返回值作为第一个参数,(可选地分配)第二个值作为第二个参数。因此,我需要可以通过以下方式调用的函数: 问题答案: 不,它无法完成,唯一的选择是返回一个指针并检查它是否为nil。

  • 问题内容: 随着框架的发展,我决定将其拆分为文件,而不是将其保留在主设计文件中。但是,这样做不会返回任何值。 数据不为空-如果我警告js文件中的值,它们在那里! 功能: 1 .js文件中的功能(在执行之前包含) 因此,这是执行部分: 而且测试是空的…我已经尝试过不同的编写方式,但是我想我误解了js的可能性吗? 问题答案: 您不能这样做:由于调用是异步的,因此get_data函数无法返回ajax调用

  • 问题内容: 如何从函数内部返回值? 这是我的基本设置: 问题答案: 使用回调函数,这是JavaScript的方式: