猫鼬用承诺保存并填充
Mongoose save with promises and populate
>我有以下代码(猫鼬已被蓝鸟承诺)
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 函数返回一个承诺,一旦解决,将返回新保存的课程,而不是教师。上面的代码有效,但它并不优雅,并且不能很好地使用 promise 来避免回调地狱。
我考虑的另一种选择是返回课程,然后进行填充,但这意味着重新查询数据库。
任何想法如何简化这一点?
编辑:我认为发布保存代码但使用本机回调(省略错误处理)可能很有用
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);
});
});
}
使用 .return()
:
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();
}).return(newCourse);
}
还记得链接的工作原理吗?
.then(function() {
return somethingAsync().then(function(val) {
...
})
})
等效于(忽略任何闭包变量):
.then(function() {
return somethingAsync()
})
.then(function(val) {
...
})
return(x)
简直等同于.then(function(){return x;})
相关文章:
- 如何设置html元素填充的动画
- 如何使用jquery在填充自动完成的值后使文本框只读
- 如何通过ajax刷新JSF填充的javascript变量
- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 用与线条相同的颜色填充多折线图上的点
- 在注册表单上,表单字段不会保存在提交时自动填充的浏览器中.(ReactJs)
- 如何使用javascript自动提交保存/重新填充的复选框
- 保存时填充Mongoose
- 猫鼬用承诺保存并填充
- 角度 UI-grid 保存来自不同范围对象的预填充值
- PHP:用颜色填充图像块并保存信息
- 如何保存每次迭代的值并相应地填充html行
- 将表单数据保存到序列化数组Javascript后,重新填充表单
- 文本框,用户填充后保存该文本框
- 猫鼬填充丢失数组保存的更改
- 如何从本地存储中保存的数据填充表单
- 从contenteditable填充并保存文本
- 使用保存在本地存储上的数据填充HTML表单
- 如何从多个选择框中保存值,该框在angularjs中使用ng-repeat填充