我正在尝试从两个不同的集合category_types
和categories
中获取数据。每个类别都有一个父类别类型。因此,我想在类别的每个索引中查找所有类别时推送category_type详细信息。
这是我的代码
exports.findAllWithParentChild = (req, res) => {
let resData = [];
Models.Category.find()
.then(data => {
data.forEach(element => {
Models.CategoryType.findById(mongoose.Types.ObjectId(element.categorytype_id))
.then(catType => {
resData.push(element, {'category_type' : catType})
})
});
console.log(resData)
res.send({
response: true,
message: 'Categories fetched successfully.',
data : resData
});
}).catch(err => {
res.status(500).send({
response: false,
message: "Some error occurred while retrieving."
});
});
};
如果我在循环中使用控制台resData
,则它可以正确打印数据,在循环外它为空并发送空响应。
我希望格式看起来像这样
[{
_id: 5cb2f300ce34a53c9070ca9c,
title: 'edeededede',
description: 'dededededed',
slug: 'ededede',
categorytype_id: 5cb2f247db13d03360a3a3c5,
user_id: 'dedede',
created_at: 2019-04-14T08:44:48.516Z,
updated_at: 2019-04-14T08:44:48.516Z,
__v: 0 ,
category_type:
{
_id: 5cb2f247db13d03360a3a3c5,
title: 'trgtrgtrg',
description: 'trgtrgtrg',
slug: 'trgtrgtr',
user_id: 'gtrgtrgtr',
created_at: 2019-04-14T08:41:43.935Z,
updated_at: 2019-04-14T08:41:43.935Z,
__v: 0
}
}]
如果有更好的方法,请告诉我。
答案 0 :(得分:0)
这里的问题是,您的console.log
在异步函数之前(在then
语句内)执行。您应该考虑使用async/await
语句,如下所示。
exports.findAllWithParentChild = (req, res) => {
let resData = [];
Models.Category.find()
.then(data => {
data.forEach(async element => {
let catType= await Models.CategoryType.findById(mongoose.Types.ObjectId(element.categorytype_id));
resData.push(element, {'category_type' : catType});
});
console.log(resData)
res.send({
response: true,
message: 'Categories fetched successfully.',
data : resData
});
}).catch(err => {
res.status(500).send({
response: false,
message: "Some error occurred while retrieving."
});
});
};