Я следующий код (Mongoose был promisified с Bluebird)Mongoose сохранить обещания и заполнить
function createNewCourse(courseInfo, teacherName) {
var newCourse = new courseModel({
cn: courseInfo.courseName,
cid: courseInfo.courseId
});
return newCourse.saveAsync()
.then(function (savedCourse) {
var newTeacher = new newTeacherModel({
na: teacherName,
_co: savedCourse._id // This would be an array
});
return newTeacher.saveAsync().then(function() {
return newCourse;
});
});
}
Это упрощение моей проблемы, но она иллюстрирует это хорошо. Я хочу, чтобы моя функция createNewCourse вернула обещание, что после разрешения вернет вновь сохраненный курс, не учитель. Вышеприведенный код работает, но он не изящный и не использует обещания, чтобы избежать обратного ад.
Другой вариант, который я рассмотрел, возвращает курс, а затем выполняет заполнение, но это будет означать повторное запрос базы данных.
Любые идеи, как это упростить?
Edit: Я думал, что это может быть полезно, чтобы получить возможность отправлять сохранения кода, но с использованием собственных функций обратного вызова (исключая обработки ошибок)
function createNewCourse(courseInfo, teacherName, callback) {
var newCourse = new courseModel({
cn: courseInfo.courseName,
cid: courseInfo.courseId
});
newCourse.save(function(err, savedCourse) {
var newTeacher = new newTeacherModel({
na: teacherName,
_co: savedCourse._id // This would be an array
});
newTeacher.save(function(err, savedTeacher) {
callback(null, newCourse);
});
});
}