我在nodejs和mongodb和angularjs中创建chield和parent类别菜单。我担心的是当我使用回调返回推送的数组时,数组只包含单个记录,虽然我有很多数据。我不知道什么是gonig错误。这是我的代码。
async.waterfall([
function(cb) {
//getting the parent category
mealCatModel.find({
parentId: ''
}, {}, function(error, result) {
if (error) {
cb(error, null);
} else {
if (result) {
//loop through the record
result.forEach(function(key, value) {
//find the chield category on behalf of parent id and key.id
mealCatModel.find({
parentId: key._id
}, {}, function(err, subCat) {
if (subCat) {
subCat.forEach(function(k, v) {
if (k.parentId == key._id) {
// pushing all the record in a single array
mainJson.push({
mainCatId: key._id,
mainCatName: key.mealCatName,
subCatId: k._id,
subCatName: k.mealCatName
});
cb(null, mainJson);
}
})
}
})
})
} else {
cb('record not foound', null);
}
}
});
}
], function(error, mainJson) {
///return the err
if (error) {
res.json({
type: false,
data: 0
});
} else {
// return the array to front end
res.json({
type: true,
data: mainJson
});
}
});
第一个查找函数获取主要类别并依赖于我在键值对中循环的那条记录,然后我发现key._id代表我再次运行具有主类别的父元组的查询查询。所以以这种方式我得到我的chield类别,然后推送mainJson数组中的数据。但是当我返回cb()回调时,它只返回单个数组。
答案 0 :(得分:0)
回调正在.forEach
中执行。在执行时,循环尚未完成所有迭代。您应该重构代码以在.forEach
表达式后返回回调:
if (subCat) {
subCat.forEach(function(k, v) {
if (k.parentId == key._id) {
// pushing all the record in a single array
mainJson.push({
mainCatId: key._id,
mainCatName: key.mealCatName,
subCatId: k._id,
subCatName: k.mealCatName
});
}
});
return cb(null, mainJson);
}