Im sadece merak. Bunu yapmak için kötü bir uygulama olarak kabul edilir? Benim düşünceme göre, buna bağlı olarak, neyi başarmaya çalıştığınıza bağlı. Söz zincirleri çeşitli nedenlerle kesintiye uğrayabilir, ancak genellikle bu ikisi iki gruba ayrılır. Classic error occur
ve early break in chain
gerekli. Mantıksal olarak ikincisi, instance of Error
olması gereken bir şey olarak değerlendirilemez. mantıksal olarak, zincirde erken kesintili (tamamen durumda olabilir) hatası olarak kabul edilebilir ise
const handleError = (err) => {
...
}
const skip = (reason, ..., ...) => {
/**
* construct whatever you like
* just for example here return reason
*/
return reason
}
Promise.resolve()
.then(() => {
if (iShouldEndChainEarlier) {
throw skip('I would like to end chain earlier')
}
return asyncOperation1()
})
.then(results => {
...
return asyncOperation2(results)
})
.then(... => {
...
})
.catch(interrupt => {
if (interrupt instanceof Error) {
return handleError(interrupt)
}
/**
* Handle breaking promise chain earlier
* having interrupt reason in scope
*/
})
olarak, özel hata oluştur ve iki catch
blok arasında ayrım olabilir. Öyleyse, sözün zincirinde meydana gelebilecek herhangi bir kesintiyi ele alırken, başka birinin bir yaklaşımı düşünebileceğini söylüyorsunuz. Biz iddia olabilir
bu düğümünde first error pattern
karşı bir şey olarak kabul edilebilir yapar. Bir hata varsa iyi uygulama err
gerçekten instanceof Error
aksi callback(null, data)
olması gereken yerde callback(err)
gibi geri arama çağırmak olacaktır. Ama akılda sahip diğer tarafta .catch(fn)
o içinde bulunduğunuz durum dayalı onRejected
parametre işlemek için yeterince iyi görünüyor bana then(undefined, onRejected)
için sadece şeker olduğunu.
değil (açıkça olarak çözmek-başarısız olan birini yeni bir söz iade edebilir uygun) bb sonra '' '? Eğer sadece "zinciri bozmak" işe yaramazsa o zaman bir zincir değildir. – user2864740
Sen (http://stackoverflow.com/q/20714460/1048572) [o kırık zincirdeki aşamasına dayanarak bir işlevi Molası söz zinciri ve çağrı] bakmak isteyeceksiniz ve [Birden yakalar Handling söz zincirinde] (http://stackoverflow.com/q/26076511/1048572) – Bergi