Sözler konusunda hala oldukça yeniyim ve şu anda bluebird kullanıyorum, ancak bununla nasıl başa çıkacağımı tam olarak bilmediğim bir senaryom var.
Örneğin bir ekspres uygulamada şöyle bir söz zincirim var:
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" });
});
Yani peşinde olduğum davranış:
- Kimliğe göre hesap almaya gider
- Bu noktada bir ret olursa, bombayı atın ve bir hata verin
- Hata yoksa, iade edilen belgeyi modele dönüştürün
- Şifreyi veritabanı belgesiyle doğrulayın
- Parolalar uyuşmuyorsa bombalayın ve farklı bir hata verin
- Hata yoksa şifreleri değiştirin
- Sonra başarıya dön
- Başka bir şey ters giderse, 500 iade edin
Yani şu anda yakalananların zincirlemeyi durdurmadığı görülüyor ve bu mantıklı, bu yüzden zinciri bir şekilde hatalara bağlı olarak belirli bir noktada durmaya zorlamanın bir yolu olup olmadığını veya daha iyi bir yol olup olmadığını merak ediyorum. bunu bir çeşit dallanma davranışı elde edecek şekilde yapılandırmak için if X do Y else Z
.
Herhangi bir yardım harika olur.