gpt4 book ai didi

javascript - 如何在nodejs中循环异步函数?

转载 作者:行者123 更新时间:2023-12-01 00:18:34 25 4
gpt4 key购买 nike

我正在尝试使用 ID 从数据库获取帖子。因此,我循环 Id 数组并使用 mongoose 方法“findById”来获取响应。但是循环在完成主体之前完成迭代。怎么处理这个问题?


function getSortedPosts(callback){
var landingPosts = new Object;
categoryModel.find((err,categories) => {
if(err) console.log(err);
else{
categories.forEach((category,i) => {
landingPosts[category.category] = new Array;
//for each post in a category
category.posts.forEach((postid,j) => {
console.log(":")
//limiting posts per category to 3
if (j<3){
postModel.findById(postid,(err,foundpost) => {
if(err) console.log(err)
else{
landingPosts[category.category].push(foundpost);
if(i === categories.length-1){
console.log(i)
if(j === 2){
callback(landingPosts);
}
}
}
})
}
})
})
}
})
}
getSortedPosts((lp) => {.......})

我不知道如何使用 Promise 或 async wait...所以我使用回调。现在学习它们对我有帮助吗?(我计划在当前项目之后学习它们,因为我是初学者,它们让我感到困惑)

最佳答案

在开始这个项目之前,你绝对应该学习async wait

async function getSortedPosts() {
var landingPosts = {};
var categories = await categoryModel.find().catch(console.log);
for(let item of categories) {
let category = item.category;
landingPosts[category] = [];

for(let id of item.posts.slice(0,2)) {
let post = await postModel.findById(id).catch(console.log);
landingPosts[category].push(post);
}
}

return landingPosts;
}

像这样调用 getSortedPosts 函数 -

getSortedPosts().then(landingPosts => {
// some logic
})

我没有运行代码,但希望你能解决错误。

关于javascript - 如何在nodejs中循环异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59590743/

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