gpt4 book ai didi

javascript - MongoDB 中的未决 promise

转载 作者:行者123 更新时间:2023-12-04 07:25:37 25 4
gpt4 key购买 nike

let comments = await Comment.find({ post })
.populate({ path: "user", select: "name photoURL role page" })
.sort({ createdAt: -1 });

console.log("comments --", comments);
const pages = [];
let pagesData = comments.map(async (comment) => {
let page = await Pages.find({ user: comment.user._id });
console.log("page", page);
pages.push(page);
});

console.log("Pages -- ", pagesData);
我有这段代码,我试图在其中从数据库中获取文档。当我记录上面写的日志时,我得到了 comments 的预期结果和 page而不是为 pagespagesData . pagesData日志给了我:
Pages --  [
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
]
pages 日志给了我一个初始化的空数组,Pages 上的查询结果不会被推送到数组 pages .
但是,我在个人 page 中获得了所有预期结果日志。如何将这些结果添加到单个数据结构中?任何帮助表示赞赏。
提前致谢。

最佳答案

map 功能不会 promise 您需要使用 Promise.all方法,并控制 pages 数组。

const pages = [];
let pagesData = comments.map(async (comment) => {
let page = await Pages.find({ user: comment.user._id });
console.log("page", page);
pages.push(page);
});
await Promise.all(pagesData);
console.log("Pages -- ", pages);
上面的方案会解决pending promise的问题,但是这不是在数据库中循环查询的好方法,
您可以尝试以下方法通过单个查询选择所有页面,
  • 映射以迭代评论循环并获取用户 ID 数组
  • $in选择所有拥有 _id 的用户来自数组
  • let pages = await Pages.find({ 
    user: {
    $in: comments.map((comment) => comment.user._id);
    }
    });
    console.log("Pages -- ", pages);

    关于javascript - MongoDB 中的未决 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68234598/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com