我使用mongoose在检查成员是否已经存在于数据库中后,在数据库中创建一个新的成员条目。如果成员已经存在,我需要返回一个响应,否则继续插入新的。下面是代码:
createNewMember = (req, res, next) => {
Member.findOne({email: email}).exec()
.then((members) => {
if(members == null || members.length==0) {
// create newMember object
return newMember.save() // 1 --> promise returned
} else {
res.status(409).json({message: "Member already present"}) // 2 --> I want to return
}
})
.then((result) => {
if(res.statusCode === 409) return res; // 3 --> I added this hack to resolve the problem
return res.status(201).json({message: "member created"}); // 4 --> then block for newMember.save()
})
.catch(err => {
// handle error and return error response
})
我想要的是,如果flow到达第2点,但第二个then块被调用,则中断promise链。第3点是我添加的检查,以防止第二个then块被执行,但我不认为这是处理它的最佳方法。我相信这是一个常见的场景,有没有更好的方法来做到这一点?
2条答案
按热度按时间7y4bm7vi1#
如果使用
async
和await
重写逻辑,事情会变得更容易:yrdbyhpb2#
除了抛出自己的Error并跳到catch块之外,没有其他方法可以打破promise链。但是,你不想像那样使用Error's,因为这种情况本身不是Error,它只是某种逻辑环境(成员已经存在)。我建议您将
.then()
看作是蛋糕层,具有单独的关注点,如下所示: