Tôi vẫn còn khá mới với những lời hứa và hiện đang sử dụng bluebird, tuy nhiên tôi có một kịch bản mà tôi không chắc chắn làm thế nào để đối phó với nó tốt nhất.
Vì vậy, ví dụ tôi có một chuỗi lời hứa trong một ứng dụng thể hiện như vậy:
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" });
});
Vì vậy, hành vi tôi theo sau là:
- Đi lấy tài khoản bằng Id
- Nếu có sự từ chối tại thời điểm này, hãy ném bom và trả lại lỗi
- Nếu không có lỗi, chuyển đổi tài liệu được trả về mô hình
- Xác nhận mật khẩu với tài liệu cơ sở dữ liệu
- Nếu mật khẩu không khớp thì đánh bom và trả về một lỗi khác
- Nếu không có lỗi thay đổi mật khẩu
- Sau đó trở lại thành công
- Nếu có gì sai, hãy trả lại 500
Vì vậy, các sản phẩm khai thác hiện tại dường như không ngăn được chuỗi, và điều đó có ý nghĩa, vì vậy tôi tự hỏi liệu có cách nào để tôi buộc chuỗi dừng lại ở một điểm nhất định dựa trên các lỗi hay không, nếu có cách nào tốt hơn để cấu trúc này để có được một số dạng hành vi phân nhánh, như có một trường hợp if X do Y else Z
.
Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời.