Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Mongoose处理承诺的问题_Javascript_Mongoose_Error Handling_Promise - Fatal编程技术网

Javascript 使用Mongoose处理承诺的问题

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

我正在做我自己的项目。他的主要思想是电影评论

我目前正在处理HTTP请求,试图使我的代码更好一点。 我想我在处理承诺时遇到了问题:

试试看{
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 => {