Поскольку ваш код все еще добавляет учеников, когда вы их вышли, посмотрите этот код
const findClass = LessonClass.findOne({ className: req.body.className}).exec();
findClass.then(classObject => {
// check that each emails exists and has role member
const studentArray = [];
const emailBody = req.body.email;
emailBody.forEach(email => User.findOne({email}).exec()
.then(userObject => {
if (userObject.role !== 'member') {
return res.status(400).send({
error: 'Only users with role member can be added to a class as students'
});
}
const student = {
email: userObject.email,
studentName: userObject.firstName + ' ' + userObject.lastName
};
// add the student to the student array
studentArray.push(student);
console.log(studentArray); // returns student object inside array
return studentArray;
})
.then(students => {
console.log(students);
}));
})
Что я сделал, я удалил ваш console.log
и связал его со вторым then
иваш первый then
вернул массив студентов.
В javascript обратные вызовы не блокируют, то есть они не будут блокировать последовательность выполнения, и управление перейдет к следующим операторам.Когда вы объявили studentsArray
и инициировали несинхронизирующую операцию (обещание), он не дождался завершения выполнения и сразу перешел к оператору console.log
.