gpt4 book ai didi

node.js - Node Js 链接响应

转载 作者:行者123 更新时间:2023-12-03 12:14:22 25 4
gpt4 key购买 nike

我正在尝试在循环内进行 db 调用,并希望将该数据添加到一个对象中,然后将该对象发送给用户,但我在用户端只得到一个空对象。
我已经检查过这个 asynchronous response into a loop in javascript NodeJS

router.get('/collection', (req, res) => {
const Data = {}

Section.find({})
.then(sections => {
sections.map(section => {
let id = section._id;
Product.find({section: id})
.then(products => {
// console.log(products)
Data[section.title] = {
title: section.title,
routeName: section.title,
id,
items: products
}
console.log(Data)
})
.catch(err => {
return res.status(500).json(err)
})

})
return res.json(data)
})
.catch(err => {
return res.status(500).json(err)
})
})

我希望输出像:-
{
food : {
items: [...]
},
vegetable: {
items: [...]
}
}

食物和蔬菜是从数据库调用中获取的键,每个键中的项目从对数据库的单独调用中返回。

最佳答案

return res.json(data)在解决任何映射的 Product-promises 之前执行(还有一个错字,因为您返回的是 data 而不是 Data )。一种方法是映射 find - promise 并使用 Promise.all在映射数组上。就像是:

router.get('/collection', (req, res) => {
const Data = {}

Section.find({})
.then(sections => {
const sectionProductPromises = sections.map(section => {
let id = section._id;
return Product.find({
section: id
})
.then(products => {
Data[section.title] = {
title: section.title,
routeName: section.title,
id,
items: products
}
});

});
return Promise.all(sectionProductPromises);
})
.then(() => {
res.json(Data)
})
.catch(err => {
res.status(500).json(err)
});
});

关于node.js - Node Js 链接响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61949122/

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