ฉันยังค่อนข้างใหม่สำหรับสัญญาและกำลังใช้ bluebird อยู่ในขณะนี้ แต่ฉันมีสถานการณ์ที่ฉันไม่แน่ใจว่าจะจัดการกับมันอย่างไรดีที่สุด
ตัวอย่างเช่นฉันมีห่วงโซ่สัญญาภายในแอปด่วนดังนี้:
repository.Query(getAccountByIdQuery)
.catch(function(error){
res.status(404).send({ error: "No account found with this Id" });
})
.then(convertDocumentToModel)
.then(verifyOldPassword)
.catch(function(error) {
res.status(406).send({ OldPassword: error });
})
.then(changePassword)
.then(function(){
res.status(200).send();
})
.catch(function(error){
console.log(error);
res.status(500).send({ error: "Unable to change password" });
});
ดังนั้นพฤติกรรมที่ฉันตามคือ:
- ไปรับบัญชีด้วย Id
- หากมีการปฏิเสธ ณ จุดนี้ให้ทิ้งระเบิดและส่งคืนข้อผิดพลาด
- หากไม่มีข้อผิดพลาดในการแปลงเอกสารกลับไปเป็นแบบจำลอง
- ตรวจสอบรหัสผ่านด้วยเอกสารฐานข้อมูล
- หากรหัสผ่านไม่ตรงกันให้ทิ้งระเบิดและส่งคืนข้อผิดพลาดอื่น
- หากไม่มีข้อผิดพลาดให้เปลี่ยนรหัสผ่าน
- จากนั้นคืนความสำเร็จ
- หากมีข้อผิดพลาดอื่นให้คืน 500
ดังนั้นการจับในขณะนี้ดูเหมือนจะไม่หยุดการผูกมัดและนั่นก็สมเหตุสมผลแล้วดังนั้นฉันจึงสงสัยว่ามีวิธีใดที่ฉันจะบังคับให้โซ่หยุด ณ จุดใดจุดหนึ่งตามข้อผิดพลาดหรือมีวิธีที่ดีกว่า เพื่อจัดโครงสร้างสิ่งนี้เพื่อให้ได้รูปแบบของพฤติกรรมการแตกแขนงตามที่มีในกรณีif X do Y else Z
นี้
ความช่วยเหลือใด ๆ จะดีมาก