我是新来的,不管是普通的还是JS的。我想要完成的是调整来自DB的响应,添加另一个字段。我有一种猫鼬的方法,它给我提供了所有现存的课程,我想在这些信息中添加每一个课程的所有铭文。所以我在尝试这个:
exports.getAllCourses = async(req, res) => {
try {
const rawCourses = await Course.find();
const courses = await courseAdapter.apply(rawCourses)
await res.json({courses});
} catch (error) {
console.log(error);
res.status(500).send("Ocurrio un error imprevisto :/");
}
};我的courseAdapter
exports.apply = (courses) => {
return courses.map(async course=> (
{
...course._doc,
number: await coursetUtils.getNumberOfInscriptions(course._doc._id)
}
));
}我的courseUtils:
exports.getNumberOfInscriptions = async courseId => {
return await CourseInscription.countDocuments({courseId: courseId});
}我认为我的问题在于async-await函数,因为有了这段代码,我得到了以下内容:
{"courses":[
{},
{}
]}或者改变一些东西我得到这个:
{"courses":[
{"courseInfo":{...},
"number":{}
},
{"courseInfo":{...},
"number":{}
}
]}但从来没有多少铭文上的回应。顺便说一下,我在代码的其他部分使用函数getNumberOfInscriptions()进行验证和工作。
发布于 2020-08-09 23:14:08
我尝试了很多方法:我改变了我在应用函数中处理来自DB的数据的方式,我把它当作数组来对待。
exports.apply = async (courses) => {
var response = [];
for (let c of courses) {
var doc = c._doc;
var tmp = [{course: doc, inscriptionNumber: await courseUtils.getNumberOfInscriptions(c._doc._id)}];
response = response.concat(tmp);
}
return response;
}我认为这不是一个很好的方式来完成我的目标,但它是有效的。如果我发现更好的东西,性能或清洁,我会张贴。
无论如何,当我调用我的map函数时,我仍然不知道我以前的async-await函数做错了什么。如果有人知道,请告诉我。
https://stackoverflow.com/questions/63330784
复制相似问题