Javascript 使用Mongoose处理承诺的问题
我正在做我自己的项目。他的主要思想是电影评论 我目前正在处理HTTP请求,试图使我的代码更好一点。 我想我在处理承诺时遇到了问题:Javascript 使用Mongoose处理承诺的问题,javascript,mongoose,error-handling,promise,Javascript,Mongoose,Error Handling,Promise,我正在做我自己的项目。他的主要思想是电影评论 我目前正在处理HTTP请求,试图使我的代码更好一点。 我想我在处理承诺时遇到了问题: 试试看{ let newMovie=等待MovieRepository.addNewMovie({ 名称:req.body.name, 年份:请求主体年份, 描述:req.body.description, 长度:要求的主体长度, 类型:req.body.genres, totalRating:req.body.totalRating }); 返回res.statu
试试看{
let newMovie=等待MovieRepository.addNewMovie({
名称:req.body.name,
年份:请求主体年份,
描述:req.body.description,
长度:要求的主体长度,
类型:req.body.genres,
totalRating:req.body.totalRating
});
返回res.status(200).json({name:newMovie,message:'Movie added successfully!'});
}捕获(错误){
返回res.status(400).json({status:400,message:errorMessage.addNewMovie});
}
此代码有效我正在添加一部新电影,我得到了预期的OK状态
快速解释我的代码:我正在使用MovieRepository
使用mongoose功能添加新电影。从尸体上获取我需要的所有信息并发送给客户
现在,我尝试稍微修改一下代码:
let newMovie=wait MovieRepository.addNewMovie({
名称:req.body.name,
年份:请求主体年份,
描述:req.body.description,
长度:要求的主体长度,
类型:req.body.genres,
totalRating:req.body.totalRating
}).然后(()=>{
返回res.status(200).json({
名称:新电影,
消息:“已成功添加电影!”
});
}).catch((错误)=>{
返回res.status(400).json({
现状:400,
消息:errorMessage.addNewMovie,
系统错误:错误
});
});
此代码工作不正常。
在这里,我使用promise功能来使用然后
和捕获
。请注意,我实际上并没有改变这些功能中的任何内容
在本例中,电影也成功地添加到数据库中,但客户端获得状态400
你知道这里发生了什么吗?我的理解可能有点离题,也不正确(对JS来说是新手),但我认为
新电影
在你的通话中没有定义
尝试更改:
.then(() => {
致:
另外,我认为这两种方法(有承诺和无承诺)中的return
语句所做的事情并不相同——这可能会对代码的其余部分产生影响
这是我对这两种方法之间差异的有限理解:
- 第一种方法将
addNewMovie
的返回值分配给变量newMovie
,外部异步函数返回res.status(…).json(…)
返回的任何内容
- 第二种方法将承诺链
res.status(…).json(…)
的返回值分配给newMovie
——然后外部异步函数隐式/自动返回未定义的(如果没有显示其他返回
语句)
- 如果您将
捕获
移动到然后
上方,我认为这将允许您看到您的添加新电影
正在成功完成(即电影正在添加到数据库),但您的成功处理程序然后
正在抛出错误
我相信其他人会给你一个更好、更正式、更准确的解释。你能复制/粘贴你的addNewMovie方法吗?这很有效,我想我没有注意到我的新方法。顺便说一句,你能解释一下这两种方法的实际区别吗?
.then(newMovie => {