等待将undefined返回到异步函数(var all_courses未定义)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了等待将undefined返回到异步函数(var all_courses未定义)相关的知识,希望对你有一定的参考价值。
我正在尝试返回属于某个程序的课程。因为我使用async / await但它没有返回在异步函数中作为id发生的程序的过程:
程序控制器
function getProgram(req, res){
var programId = req.params.id;
Program.findById({'_id': programId}, (err, program)=>{
if (err) return res.status(500).send({message: 'Petition failed'});
if (!program) return res.status(404).send({message: 'There is not program to show'});
getCoursesByProgram(programId).then((value) =>{
return res.status(200).send({
program,
all_courses: value.all_courses
});
});
});
}
async function getCoursesByProgram(program_id){
var all_courses = await Course.find({'program': program_id}).exec((err, courses)=>{
if(err) return handleError(err);
return courses;
});
return{
all_courses: all_courses
}
}
楷模
'use strict'
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var CourseSchema = Schema({
title: String,
video: String,
creator: {type: Schema.ObjectId, ref: 'User'},
program: {type: Schema.ObjectId, ref: 'Program'},
description: String,
created_at: String
});
module.exports = mongoose.model('Course', CourseSchema);
'use strict'
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ProgramSchema = Schema({
title: String,
creator: {type: Schema.ObjectId, ref: 'User'},
image: String,
description: String,
created_at: String
});
module.exports = mongoose.model('Program', ProgramSchema);
请有人帮我这个吗?
答案
当您将回调传递给.exec
时,它不再返回承诺。相反,您可以使用promises进行错误/值处理:
try {
return { all_courses: await Course.find({'program': program_id}).exec() };
} catch (err) {
return handleError(err);
}
请注意,除非getCoursesByProgram
抛出错误,否则handleError
将始终解析。
getProgram
也可以是异步函数。您也可以合并错误处理,但如果您想要更通用的错误处理,则必须单独捕获错误或以某种方式解析错误消息。
async function getProgram(req, res) {
try {
const programId = req.params.id;
const program = await Program.findById({'_id': programId}).exec();
if (!program) return res.status(404).send(...);
const courses = await getCoursesByProgram(programId);
return res.status(200).send({
program,
all_courses: value.all_courses,
});
} catch (err) {
res.status(500).send({ message: 'Petition failed' });
}
}
以上是关于等待将undefined返回到异步函数(var all_courses未定义)的主要内容,如果未能解决你的问题,请参考以下文章