【发布时间】:2017-08-04 10:05:32
【问题描述】:
我试图在第一个 then 方法之后链接第二个 then 方法,但由于某种原因它无法正常工作。只有当我嵌套 then 方法时它才能正常工作。以下是无法正常工作的代码:
auth.post('/signup', (req, res, next) => {
const { username } = req.body
const { password } = req.body
Users.findOne({ username })
.then(
existingUser => {
if (existingUser) return res.status(422).send({ error: 'Username is in use' })
const user = new Users({ username, password })
user.save()
},
err => next(err)
)
.then(
savedUser => res.send({
username: savedUser.username,
password: savedUser.password
}),
err => next(err)
)
})
在这里,当我向'/signup' 发帖时,user 被保存到数据库中,但我没有得到包含用户名和密码的响应。然而:
auth.post('/signup', (req, res, next) => {
const { username } = req.body
const { password } = req.body
Users.findOne({ username })
.then(
existingUser => {
if (existingUser) return res.status(422).send({ error: 'Username is in use' })
const user = new Users({ username, password })
user.save()
.then(
savedUser => res.json({
username: savedUser.username,
password: savedUser.password
}),
err => next(err)
)
},
err => next(err)
)
})
这按预期工作。 user 被保存,我得到用户名和密码的响应。我读过您可以以扁平方式链接这些 then 方法而无需嵌套。但是我在这里检查了问题,但找不到关于我在这里做错了什么的答案。有人可以帮忙解决这个问题吗?
【问题讨论】:
-
更改了我的答案以尽可能地帮助您,希望对您有所帮助;)
-
是的。还要感谢猫鼬脚注。我已经有一段时间没有使用猫鼬了。
-
Conditions require nesting。没有出路,也没有错。
标签: javascript ecmascript-6 es6-promise