Я запрашиваю данные категории через mon goose, собираю массив food_ids, перебираю каждый Id и нахожу его в другой коллекции под названием Recipes, где я собираю еще некоторые данные. В каждой итерации я помещаю его в массив. В конце я пытаюсь отправить этот массив объектов как JSON. Однако все, что я получаю, это пустой вывод. Во время итерации, когда я консоль журнала данных, все выглядит правильно. Я также консоль зарегистрировал один и тот же массив дважды, один раз в forEach и один раз снаружи, и заметил, что один внешний выполняется первым, что не имеет смысла для меня. Это потому, что findById является асин c вызовом? И если это так, как я мог тогда управлять этим потоком, чтобы внешний массив имел данные. Ниже весь мой код для конечной точки:
const express = require('express');
const router = express.Router();
const Category = require('../models/category');
const Recipe = require('../models/recipe');
/**
Endpoint: /category/:id
Outcome: List of recipes belonging to category
*/
router.get('/:id', (req, res) => {
Category.findById(req.params.id, 'mealIds', (err, category) => {
const recipesReceived = [];
if(!err) {
if(category) {
category.mealIds.forEach(mealId => {
Recipe.findById(mealId, 'name category cuisine image' , (err, recipe) => {
recipesReceived.push(recipe);
console.log(recipesReceived); //shows data
});
});
console.log(recipesReceived); //shows blank. somehow ends up executing before the console log within forEach condition
}
else {
console.error(err);
}
}
});
});
module.exports = router;