Я использую служебный модуль Async для возврата элементов из базы данных Mongodb. Я хочу сделать это асинхронно. У меня возникают проблемы при попытке вернуть эти предметы.
Я хочу запустить обратный вызов, как только ВСЕ User.find()'s
будут завершены, прямо сейчас async.each()
завершается раньше и дает мне только один элемент из базы данных, когда он должен возвращать их все.
Код ниже:
async.each(lessons, function(lesson, next) { // For each item in lesson array
if (_.isEmpty(lesson.lesson_grades) == true) { // Check if the grades array is empty
return;
} else {
async.each(lesson.lesson_grades, function(grade, next) { // For each grade in grade array
User.find({ // Find user from grade user_id
_id: grade.user_id,
}, '-salt -hashedPassword', function(err, user) {
grade["name"] = user[0].name; // Add name
grade["email"] = user[0].email; // Add email
next(); // !! I think this is where the problem lies, it fires next() once the first item has been returned - so it doesn't get to the other items !!
});
}, function(err) {
next(lessons);
});
}
}, function(lessons, err) {
return res.json(200, lessons); // Return modified lessons (with name and email) to browser, currently only returns one but returns them all if a setTimeout() is added, making it a premature callback problem
});
Может ли кто-нибудь указать мне в правильном направлении, как это сделать правильно? Должен ли я отслеживать итерации? Любая помощь будет оценена по достоинству.