P粉3161107792023-08-18 21:15:35
除了拋出自己的錯誤並跳到catch區塊之外,沒有辦法打破promise鏈。但是,您不希望像那樣使用錯誤,因為情況本身並不是一個錯誤,而只是一種特定的邏輯情況(成員已經存在)。我建議將您的.then()視為具有不同關注點的蛋糕層,如下所示:
Member.findOne({email: email}).exec() // DB layer .then((members) => { // 如果成员不存在,则开始保存并返回promise if(members == null || members.length==0) { // 创建newMember对象 return newMember.save() // 1 --> 返回promise } // 如果成员存在,则返回undefined else { return; } }) // Response Layer .then((newMember) => { let statusCode; let message; // 在.save()成功时,promise解析为新成员 if(newMember) { statusCode = 201; message = "成员已创建"; } // 如果我们在第一个.then()中返回了undefined,我们会到达这里 else { statusCode = 409; message = "成员已存在"; } return res.status(statusCode).json({message}); }) .catch(err => { // 处理错误并返回错误响应 })