ฉันยังค่อนข้างใหม่สำหรับสัญญาและกำลังใช้ 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นี้
ความช่วยเหลือใด ๆ จะดีมาก