我试图在一个循环内进行数据库调用,并希望将该数据添加到一个对象中,然后将该对象发送给用户,但是我在用户端仅得到一个空对象。我已经将这个异步响应检入到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)
在解析任何映射的产品承诺之前执行(也有错别字,因为您返回data
而不是Data
)。一种方法是映射find
-promises并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)
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句