gpt4 book ai didi

javascript - Mongoose 保存 promise 并填充

转载 作者:搜寻专家 更新时间:2023-11-01 00:32:03 25 4
gpt4 key购买 nike

我有以下代码(Mongoose 已被 Bluebird promise )

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 ,一旦解决,将返回新保存的类(class),不是老师。上面的代码可以工作,但是它不够优雅并且没有很好地使用 promises 来避免回调 hell 。

我考虑的另一个选择是返回类(class)然后进行填充,但这意味着重新查询数据库。

有什么办法可以简化这个吗?

编辑:我认为发布保存代码但使用 native 回调(省略错误处理)可能会有用

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;})

关于javascript - Mongoose 保存 promise 并填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28286894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com