Я создаю меню chield и parent category в nodejs и mongodb и angularjs. Я забочусь о том, что когда я возвращаю толкаемый массив с помощью обратного вызова, массив содержит только одну запись, хотя у меня есть много данных. Я не знаю, что такое гониг. вот мой код.
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 от имени этого я снова запускаю запрос на поиск, у которого есть родитель id основной категории. так что я получаю свою категорию прав, а затем нажимаю данные в массиве mainJson. но когда я возвращаю обратный вызов cb(), он возвращает только один массив.
Обратный вызов выполняется в .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);
}