javascript - 使用 Mongoose 处理承诺的问题
问题描述
我正在做我自己的项目。他的主要思想是电影评论。
我目前正在处理 HTTP 请求,试图让我的代码更好一些。我想我的承诺处理有问题:
try {
let newMovie = await MovieRepository.addNewMovie({
name: req.body.name,
year: req.body.year,
description: req.body.description,
length: req.body.length,
genres: req.body.genres,
totalRating: req.body.totalRating
});
return res.status(200).json({ name: newMovie, message: 'Movie added successfully!' });
} catch (error) {
return res.status(400).json({ status: 400, message: errorMessage.addNewMovie });
}
此代码有效!我正在添加一部新电影,并且按预期获得了 OK 状态。
快速解释我的代码:我正在使用MovieRepository
我使用猫鼬功能添加新电影的地方。从正文中获取我需要的所有信息并将其发送给客户。
现在,我尝试稍微更改我的代码:
let newMovie = await MovieRepository.addNewMovie({
name: req.body.name,
year: req.body.year,
description: req.body.description,
length: req.body.length,
genres: req.body.genres,
totalRating: req.body.totalRating
}).then(() => {
return res.status(200).json({
name: newMovie,
message: 'Movie added successfully!'
});
}).catch((error) => {
return res.status(400).json({
status: 400,
message: errorMessage.addNewMovie,
systemError: error
});
});
此代码运行不正常。
在这里,我使用承诺能力来使用then
and catch
。请注意,我实际上并没有更改这些功能中的任何内容。
在这种情况下,电影也成功添加到数据库中,但客户端的状态为 400。
有什么想法吗?
解决方案
我的理解可能有些偏离和不正确(JS 新手),但我认为newMovie
在您的then
通话中未定义。
尝试改变:
.then(() => {
至:
.then(newMovie => {
另外,我认为您return
在两种方法中的陈述(有承诺和没有承诺)并没有做同样的事情——这可能会对您的其余代码产生影响。
这是我对这两种方法之间差异的有限理解:
- 第一种方法将返回值分配
addNewMovie
给变量newMovie
,外部异步函数返回任何res.status(...).json(...)
返回值。 - 第二种方法将承诺链的返回值分配
res.status(...).json(...)
给newMovie
-- 然后外部异步函数隐式/自动返回undefined
(如果没有return
显示其他语句)。 - 如果您将您的 移动
catch
到 上方then
,我认为这会让您看到您addNewMovie
正在成功完成(即电影正在被添加到数据库中),但是您的成功处理程序then
正在引发错误。
我相信其他人可以给你一个更好、更正式、更准确的解释。
推荐阅读
- python - Python - 尝试从 Pandas 中的 DataFrame 中随机选择一个元素
- c# - 为什么当我插入文本框 C# 时不显示 MDI 子窗体
- javascript - 如何在使用 Java Script 将 JSON 导出到 Excel 时将整列设为数字
- r - 如何根据条件更改数据框中列的多个行值?
- python - 连续增加一个值,如果日期更改,则将变量设置为零
- dokku - 如果 dokku 进入,我如何进入我的容器
什么也没做? - c - 如何找到单词的长度并将它们作为数组返回?
- java - org.Bson 中 RawBsonDocument.getByteBuffer().array() 字节数组中的尾随零
- python-3.x - Jsonify 异常错误
- security - CSRF 请求 nonce 使得恶意 POST 成为可能?